0

我正在尝试在 s3 中上传图像这是我的代码

const upload = require('../services/file_upload');
const singleUpload = upload.single('image');
module.exports.uploadImage = (req,res) => {

  singleUpload(req, res, function (err) {
    if (err) {

       console.log(err);
       return res.status(401).send({ errors: [{ title: 'File Upload Error', detail: err}] });
    }
    console.log(res);
    return res.json({ 'imageUrl': req.file.location });
  });

}

文件上传.js

const aws = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');
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 Mime Type, only JPEG and PNG'), false);
  }
}

const upload = multer({
  fileFilter,
  storage: multerS3({
    s3,
    bucket: 'image-bucket',
    acl: 'public-read',
    contentType: multerS3.AUTO_CONTENT_TYPE, 
    metadata: function (req, file, cb) {
      cb(null, {fieldName: 'TESTING_META_DATA!'});
    },
    key: function (req, file, cb) {
      cb(null,"category_"+Date.now().toString()+".png")
    }
  })
})

module.exports = upload;

我尝试使用 postmanin serverless local 测试 api 它给出了这个错误

错误:D:\Flutter\aws\mishpix_web\node_modules\dicer\lib\Dicer.js:62:28 在 process._tickCallback (internal/process/next_tick.js:61:11) 处的多部分数据意外结束 storageErrors: [ ]

上线部署后。我尝试了api。该文件已上传到服务器,但已损坏

4

1 回答 1

0

你在使用aws-serverless-express. aws-serverless-express会将原始请求作为utf8编码转发给 Buffer。所以多部分数据会丢失或出错。我不确定为什么。

所以,我改成aws-serverless-expressaws-serverless-express-binary一切正常。

yarn add aws-serverless-express-binary

希望这有帮助!

于 2020-03-31T04:58:12.663 回答