【问题标题】:Upload image on S3 API using multer returns undefined使用 multer 在 S3 API 上上传图像返回未定义
【发布时间】:2017-12-01 18:42:46
【问题描述】:

我正在构建一个用于上传图像并将其直接存储在 S3 存储中的 API。为此,我使用 Postman。方法是 POST,输入类型是文件。当我使用 req.files 或 req.file 时,我得到未定义。

Utils.js:

getS3SignUrl: function( uri ){
   return s3_client.getSignedUrl('putObject',{Bucket:config.aws.bucket,Key:uri,ACL :"public-read"})
}

在主文件中我使用这些:

var bodyParser = require('body-parser');
var upload = require('multer')();
var utils = require('../service/utils.js');

router.post('/edit-profile', upload.single('newfile'), function(req, res) {
    console.log(req.file);  
  });
});

在控制台中,我得到了未定义,但是当我使用调试器和 req.body 时,我得到了这个:

所以,似乎我在 req.body 中有它,但是我怎样才能从这里获取它呢?

【问题讨论】:

  • 尝试使用S3的upload方法代替putObject
  • 谢谢!我使用了 multer-s3 模块并且它有效。我能够在 s3 存储上上传文件。谢谢!

标签: node.js api amazon-s3 upload multer


【解决方案1】:

除了 multer,我还安装并包含了 multerS3 模块:

var multerS3 = require('multer-s3');

然后,我配置了它。我也用我申请enctype="multipart/form-data"的表格对其进行了测试

router.post('/ceva', multer({  storage: multerS3({ s3: s3_client, bucket: "****", acl: '**',  metadata: function (req, file, cb) {  cb(null, {fieldName: file.fieldname}); }, key: function (req, file, cb) {
      cb(null, "users/10/1"); } }) }).single('newfile'), function(req, res) {
    console.log(req.files);
    res.send('da');
});

至此,文件已成功上传至 S3 存储。

【讨论】:

  • console.log(req.files[0].location);会给你文件的signedUrl
猜你喜欢
  • 2021-04-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2021-05-02
  • 2016-04-14
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
相关资源
最近更新 更多