Node.js 如何使用multer在s3存储桶中动态指定要上载到的文件路径

Node.js 如何使用multer在s3存储桶中动态指定要上载到的文件路径,node.js,express,multer,aws-sdk-nodejs,Node.js,Express,Multer,Aws Sdk Nodejs,所以,我对Nodejs很陌生,我正在尝试实现一个API来将文件上传到s3存储桶。但是,我想指定每个文件上传到的文件路径作为可选参数。最简单的方法是什么?这是上传文件的原始代码 require("dotenv/config"); const express = require("express"); const multer = require("multer") const AWS = require("aws-sdk&quo

所以,我对Nodejs很陌生,我正在尝试实现一个API来将文件上传到s3存储桶。但是,我想指定每个文件上传到的文件路径作为可选参数。最简单的方法是什么?这是上传文件的原始代码

require("dotenv/config");
const express = require("express");
const multer = require("multer")
const AWS = require("aws-sdk")

const app = express();
const port = process.env.PORT || 3000;

const s3 = new AWS.S3({
    accessKeyId: process.env.AWS_ID,
    secretAccessKey: process.env.AWS_SECRET,
    region: process.env.AWS_REGION
})

const storage = multer.memoryStorage({
    destination: (req, file, callback) => {
        callback(null, "")
    }
})

const upload = multer({storage}).single("file");

app.post("/upload", upload, (req, res) => {
    let myFile = req.file.originalname

    const params = {
        Bucket: process.env.AWS_BUCKET_NAME,
        Key: myFile,
        Body: req.file.buffer,
        
    }

    s3.upload(params, (error, data) => {
        if(error) {
            res.status(500).send(error)        
        }

        res.status(200).send(data)

    })
});


app.listen(port, () => {
    console.log(`Server is up at ${port}`)
});



如果您试图将文件上载到文件夹,AWS s3会通过添加前缀来模拟此操作。您可以通过添加文件夹名称来更改密钥参数

app.post(“/upload/:directory”),upload,(req,res)=>{
让myFile=req.file.originalname
让path=req.params.directory
常量参数={
Bucket:process.env.AWS_Bucket_NAME,
键:`${path}/${myFile}`,
正文:req.file.buffer,
}
s3.上传(参数,(错误,数据)=>{
如果(错误){
资源状态(500).发送(错误)
}
资源状态(200).发送(数据)
})
});