如何使用Node JS (Express)在s3桶中一次上传多个图像


require("dotenv").config();
const AWS = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");
const uuid = require("uuid").v4;
const path = require("path");
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_S3_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_S3_SECRET_ACCESS_KEY
});
const upload = multer({
storage: multerS3({
s3: s3,
Bucket: process.env.AWS_S3_BUCKET_NAME,
ACL: "public-read",
metadata: (req, file, cd) => {
cd(null, { fieldName: file.fieldname });
},
key: (req, file, cb) => {
const ext = path.extname(file.originalname);
const uniqueName = `${uuid()}${ext}`;
cb(null, uniqueName);
},
}),
});
module.exports = {
upload
} 
router.post("/photo-upload", upload.array('photos'), (req, res) => {  
return res.status(200).send({
success: true,
result: 'Images Uploaded',
});
});

添加这段代码后,我的代码崩溃并得到以下错误* * node_modules/multer-s3 index.js: 94case 'undefined': throw new Error('bucket is required')

错误:需要bucketat new S3Storage**

是否有办法一次上传多个文件而不使用循环?Body: buffer,我可以把它作为[buffer, buffer]发送吗?

我建议您考虑使用multer和multerS3库,如下所示。

fileUpload.js

const aws = require("aws-sdk")
const multer = require("multer")
const multerS3 = require("multer-s3")
const uuid = require("uuid").v4
const path = require("path")
const s3 = new aws.S3({
accessKeyId: <secret-id>,
secretAccessKey: <secret-key>,
region: <server-region>,
apiVersion: "2012-10-17"
})

const upload = multer({
storage: multerS3({
s3:s3,
bucket: <bucket-name>,
acl: "public-read",
metadata: (req, file, cd) => {
cd(null, {fieldName: file.fieldname})
},
key: async (req, file, cb) => {
const ext = path.extname(file.originalname)
const uniqueName = `${uuid()}${ext}`
cb(null, uniqueName)
},


})
})

然后将该文件导入路由并添加upload。数组到要在

上上传图像的路由。imageRoutes.js

const express = require("express");
const router = express.Router();
const upload = require("./fileUpload")

router.post("/", upload.array("image"), (req, res) => {
res.send("uploaded")
}
module.exports = router;

最新更新