【问题标题】:upload image to s3 from node js将图像从节点 js 上传到 s3
【发布时间】:2019-10-05 09:52:08
【问题描述】:

我正在尝试将文件上传到 s3,但它并没有像我预期的那样发生。 我在中间件中创建了一个file-helper.js,如下所示

const aws = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');

aws.config.update({
        accessKeyID:'XXXXXXXXXXXXXX',    
        SecretAccessKey:'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
        region:'ap-south-1'
});

const s3 = new aws.S3();

const fileFilter = (req, file, cb) => {
    if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
      cb(null, true);
    } else {
      cb(new Error('Invalid file type, only JPEG and PNG is allowed!'), false);
    }
  }

const upload = multer({
    fileFilter,
    storage: multerS3({
      s3,
      bucket: 'demo.moveies.com',
      acl: 'public-read',
      metadata: function (req, file, cb) {
        cb(null, {fieldName: file.fieldname});
      },
      key: function (req, file, cb) {
        cb(null, Date.now().toString())
      }
    })
  })

  module.exports = upload;

我的控制器文件如下所示

const upload = require('../middleware/file-helper');
const imageUpload = upload.single('image');
exports.fileUpload = async(req,res)=>{
    imageUpload(req, res, function(err, some) {
        if (err) {
          return res.status(422).send({errors: [{title: 'Image Upload Error', detail: err.message}] });
        }
        return res.json({'imageUrl': req.file.location});
      });
}

当到达 API 端点时会报错

{ “错误”:[ { "title": "图片上传错误", “详细信息”:“配置中缺少凭据” } ] }

我无法弄清楚我的代码哪里出错了。在这种情况下谁能帮助我

【问题讨论】:

  • 疑难解答 - 您的 S3 配置是否正确?特别是地区?
  • 我的 s3 存储桶区域是 Asia Pacific(mumbai),所以我提到了 ap-south-1 .. 其余的 accessKeyIDSecretAccessKey 与 s3 存储桶相同
  • 请确保这一点。您可以通过 amazon s3 url 找到您所在的地区。
  • 无论我有什么键,我都直接在aws.config.update()配置,请检查我的问题
  • @Subhajit 甚至我从官方文档中检查了docs.aws.amazon.com/general/latest/gr/rande.html

标签: node.js amazon-s3


【解决方案1】:

您的配置详细信息中有拼写错误。它应该是 accessKeyId 而不是 accessKeyIDsecretAccessKey 而不是 SecretAccessKey

【讨论】:

    【解决方案2】:

    您使用了错误的密钥SecretAccessKeyaccessKeyID,请尝试将其更改为secretAccessKeyaccessKeyId

    aws.config.update({
        accessKeyId:'XXXXXXXXXXXXXX',    
        secretAccessKey:'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
        region:'ap-south-1'
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2014-06-27
      • 2012-10-27
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      相关资源
      最近更新 更多