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

2023-12-10

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:94 case '未定义': 抛出新错误('需要存储桶')

错误:需要存储桶 在新的 S3Storage**

有什么方法可以不使用循环一次上传多个文件。 Body:缓冲区,我可以将其作为[缓冲区,缓冲区]发送吗?


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

文件上传.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.array 添加到您要上传图像的路由中

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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Node JS (Express) 在 s3 存储桶中一次上传多个图像 的相关文章

随机推荐