【问题标题】:Multer set Dynamic destination based on typeMulter 设置基于类型的动态目的地
【发布时间】:2020-04-14 22:19:25
【问题描述】:

我有一个在我的 ExpressJS 中使用 Multer 处理文件上传的 API。 这是我的代码:

const storage = multer.diskStorage(
    {
      destination : path.join(pathStorage + pathIdCard),
      filename: function(req, file, cb){
        cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
      }
    }
);

const upload = multer({
  storage : storage
}).single('image');

router.post('/upload-image', function(req, res){
  try {
    upload(req, res, err => {
      responseUtil.success(res, obj);
    });
  } catch (e) {
    responseUtil.fail(res, 'Upload image failed!')
  }
});

上面的代码运行良好,但上面的代码只适用于一个目的地。我想根据名为type 的属性制作目的地。

我只有两种类型: 1.身份证, 2. 自拍。

所以如果类型是身份证,目的地应该是pathStorage + pathIdCard,但如果类型是自拍,那么目的地应该是pathStorage + pathSelfie

我已尝试从 SO 中的另一个问题中获得答案,但对我没有任何作用。

这是我使用邮递员的 Req 示例:

【问题讨论】:

  • “我已经尝试从 SO 中的另一个问题中获得答案,但对我没有任何帮助。” - 您能否提供有关您尝试了什么以及没有任何效果意味着什么的更多背景信息?否则,有人会来向您推荐相同的解决方案。
  • 您可以将函数传递给destination 参数,您可以在其中检查类型。

标签: node.js express multer


【解决方案1】:

我今天遇到了一个稍微不同的问题,但也许这会对你的问题有所帮助。 我想为上传的文件传递一个动态路径以保证安全。我在请求标头中传递了我的动态路径,然后从那里继续...

您可以在标题中传递类型,并根据此设置正确的路径。

const upload = multer({
  storage: multer.diskStorage({
    destination: (req, file, callback) => {
      let path;
      if(req.headers.type === 'ID_TYPE') {
        path = pathStorage + pathIdCard;  
      } else {
        path = pathStorage + pathSelfie;
      }
      callback(null, path);
    },
    filename: function(req, file, cb){
      cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
    }
  })
});

希望对你有所帮助!

【讨论】:

    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多