如何在 Multer-s3 中使用动态存储桶名称进行文件上传

ajo*_*nha 7 amazon-s3 amazon-web-services node.js multer-s3

我正在尝试使用 Node js 将文件上传到 AWS S3。

我的要求是在 multerS3 存储对象中使用桶的动态值

storage: multerS3({

        s3: s3,

        bucket:  function (req, file, cb) {
            console.log(" bucketName is >> "+JSON.stringify(req.bucketName));
            cb(null, req.bucketName)
        },

        limits : {
            fileSize : Number(Constants.UPLOADED_IMAGE_SIZE)
        },
        metadata: function (req, file, cb) {
            cb(null, { fieldName: file.fieldname });
        },

        key: function (req, file, cb) {
            cb(null, file.originalname)
        }
    })
Run Code Online (Sandbox Code Playgroud)

我试图通过请求对象传递值并在存储桶参数中使用它。但它是未定义的。

在这两种情况下,req.bucketName 和 req.body.bucketName 都是未定义的。

需要帮助来解决这个问题。

我的邮递员请求如下

在此输入图像描述

谢谢你的帮助。

小智 6

如果您使用 Postman 并有一个文件作为参数,那么在包含该文件后就没有其他内容了。

交换参数的顺序,并将bucketName放在文件前面,您将在正文中看到它。

第一张图显示了错误的顺序,body 中没有bucketName 元素。第二张图片将正确通过 Busboy,并且主体将具有“testName”的 bucketName 元素。

这将有一个使用 Busboy 和 Node 的空白主体

body.bucketName 将返回 'testName'