首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为AWS-S3桶在multer-S3中指定上传目录?

如何为AWS-S3桶在multer-S3中指定上传目录?
EN

Stack Overflow用户
提问于 2017-05-17 15:18:30
回答 3查看 14.2K关注 0票数 20

我正在使用快递+穆特- S3上传文件到AWS S3服务。

使用下面的代码,我可以将文件上传到S3 bucket ,但可以直接上传到桶中。

我想把它们上传到桶里的文件夹里。

我无法找到这样做的选择。

这是代码

代码语言:javascript
复制
AWS.config.loadFromPath("path-to-credentials.json");
var s3 = new AWS.S3();

var cloudStorage = multerS3({
    s3: s3,
    bucket: "sample_bucket_name",
    contentType: multerS3.AUTO_CONTENT_TYPE,
    metadata: function(request, file, ab_callback) {
        ab_callback(null, {fieldname: file.fieldname});
    },
    key: function(request, file, ab_callback) {
        var newFileName = Date.now() + "-" + file.originalname;
        ab_callback(null, newFileName);
    },
});
var upload = multer({
    storage: cloudStorage
});

router.post("/upload", upload.single('myFeildName'), function(request, response) {
    var file = request.file;
    console.log(request.file);
    response.send("aatman is awesome!");
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-17 15:55:12

S3并不总是有文件夹(参见http://docs.aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html)。它将通过向文件名中添加一个由/分隔的字符串来模拟文件夹。

例如:

代码语言:javascript
复制
key: function(request, file, ab_callback) {
    var newFileName = Date.now() + "-" + file.originalname;
    var fullPath = 'firstpart/secondpart/'+ newFileName;
    ab_callback(null, fullPath);
},
票数 36
EN

Stack Overflow用户

发布于 2020-04-04 14:45:10

我对动态目标路径的解决方案。希望这能帮上忙!

代码语言:javascript
复制
const fileUpload = function upload(destinationPath) {
  return multer({
    fileFilter: (req, file, cb) => {
      const isValid = !!MIME_TYPE_MAP[file.mimetype];
      let error = isValid ? null : new Error("Invalid mime type!");
      cb(error, isValid);
    },
    storage: multerS3({
      limits: 500000,
      acl: "public-read",
      s3,
      bucket: YOUR_BUCKET_NAME,
      contentType: multerS3.AUTO_CONTENT_TYPE,
      metadata: function (req, file, cb) {
        cb(null, { fieldName: file.fieldname });
      },
      key: function (req, file, cb) {
        cb(null, destinationPath + "/" + file.originalname);
      },
    }),
  });
};



module.exports = fileUpload;

如何打电话:

代码语言:javascript
复制
router.patch(
  "/updateProfilePicture/:userID",
  fileUpload("user").single("profileimage"),
  usersControllers.updateProfilePicture
);

“配置文件图像”是文件在正文中传递的关键。

"user“是指向目标文件夹的路径。您可以传递由文件夹和子文件夹组成的任何路径。因此,这会将我的文件放在桶内一个名为"user“的文件夹中。

票数 10
EN

Stack Overflow用户

发布于 2020-12-27 02:49:24

还有另一种很好的方法!写入桶名后,将文件夹名称添加到其中本身,并使用斜杠infront。

代码语言:javascript
复制
const multerS3Config = multerS3({
    s3: s3,
    bucket: process.env.AWS_BUCKET_NAME + '/<your-folder-name>', //put a slash infront
    metadata: function (req, file, cb) {
        cb(null, { fieldName: file.fieldname });
    },
    key: function (req, file, cb) {
    cb(null, Date.now() + file.originalname)
    }  
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44028876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档