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

时间:2018-05-22 12:08:21

标签: node.js amazon-web-services amazon-s3 multer-s3

我正在尝试使用节点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)
        }
    })

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

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

需要帮助来解决此问题。

我的邮递员请求如下

enter image description here

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您使用Postman并将文件作为参数,那么在包含文件之后就什么都没有了。

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

第一张图片显示不正确的顺序,并且主体将没有bucketName元素。第二张图片将正确通过Busboy,并且主体将具有'testName'的bucketName元素。

This will have a blank body using Busboy and Node

body.bucketName will return 'testName'