【发布时间】:2021-05-06 16:28:08
【问题描述】:
我花了几天时间试图弄清楚如何将照片发布到我的 AWS 存储桶,并阅读了很多关于 SO 的类似问题,但似乎没有任何效果,而且我几乎总是收到“意外字段”错误。
我已确认库是正确的版本;添加了bodyParser;添加区域/签名版本;并尝试以多种方式更改 'upload.single('image')。
在我的模型中,我试图将图像 url 保存到字段名称“image-field”,但使用它不会改变我得到的错误。我只是在尝试 FE 之前尝试在我的后端进行这项工作,并与 PostMan 一起使用。
请帮忙,我在这里疯了。
import express from 'express';
import aws from 'aws-sdk';
import multer from 'multer';
import multerS3 from 'multer-s3';
import bodyParser from 'body-parser';
const router = express.Router();
router.use(bodyParser.json())
aws.config.update({
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
region: 'us-west-2',
signatureVersion: 'v4'
})
const s3 = new aws.S3()
const upload = multer({
storage: multerS3({
s3: s3,
bucket: 'bucket-name',
acl: "public-read",
metadata: function (req, file, cb) {
cb(null, { fieldName: file.fieldname });
},
key: function (req, file, cb) {
cb(null, Date.now().toString() + '-' + file.originalname);
},
}),
})
router.post('/', upload.single('image'), (req, res, next) => {
console.log('Uploaded!')
res.send(req.file)
})
export default router;
邮递员 enter image description here
注意:如果有帮助,我将包含我成功用于我的 FE 和 BE 的旧代码,以在本地保存图像,然后在 Mongo 上保存 url。
import path from 'path';
import express from 'express';
import multer from 'multer';
const router = express.Router();
const storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, 'uploads/')
},
filename(req, file, cb) {
cb(null, `${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`)
}
})
function checkFileType(file, cb) {
const filetypes = /jpg|jpeg|png/
const extname = filetypes.test(path.extname(file.originalname).toLowerCase())
const mimetype = filetypes.test(file.mimetype)
if(extname && mimetype) {
return cb(null, true)
} else {
cb('Images only!')
}
}
const upload = multer({
storage,
fileFilter: function(req, file, cb) {
checkFileType(file, cb)
}
})
router.post('/', upload.single('image'), (req, res) => {
res.send(`/${req.file.path}`)
})
export default router;
【问题讨论】:
标签: node.js reactjs mongodb amazon-s3 multer-s3