我试图在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 });
});
}
FileUpload.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。该文件已上传到服务器中,但已损坏
答案 0 :(得分:0)
您是否使用aws-serverless-express
。 aws-serverless-express
将以utf8
编码将原始请求转发到Buffer。因此,多部分数据将丢失或出错。我不确定为什么。
因此,我将aws-serverless-express
更改为aws-serverless-express-binary
,一切正常。
yarn add aws-serverless-express-binary
希望有帮助!