Multer:在不同的文件夹中上传不同的文件类型

Cri*_*ìna 8 node.js express multer

我有一个带有两个文件输入字段的简单表单。一个是关于图像的,另一个是关于 mp3 文件的。

我有一个使用multer作为文件上传系统的快速服务器。我想将图像保存img在 .mp3 文件中,并将 mp3 文件保存在文件music夹中。

这是我到目前为止尝试过的:

var musicUpload = multer({dest: 'music'});
var imgUpload = multer({dest: 'img'});

app.post('music', 
         musicUpload.single('music'), 
         imgUpload.single('img'), 
         function (req, res) {
             ...
         });
Run Code Online (Sandbox Code Playgroud)

虽然这是形式:

<form action="post" enctype="multipart/form-data" action="music">
    <input type="file" id="img" name="img">
    <input type="file" id="music" name="music">
    <input type="submit" value="Send">
</form>
Run Code Online (Sandbox Code Playgroud)

我需要以不同的方式处理 2 个不同的文件,这就是我两次使用“single”的原因。但是,不幸的是,我收到了“意外字段”错误消息。

怎样才能达到效果?

附言。关于多个文件上传的问题有很多,但没有一个解决了我的具体问题。在标记这个问题时不要太快:)

Mat*_*lly 6

您可以尝试使用 DiskStorage 之类的东西。根据他们的文档:https : //github.com/expressjs/multer

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    if (file.mimetype === 'audio/mp3') {
      cb(null, 'songs')
    } else if (file.mimetype === 'image/jpeg') {
      cb(null, 'img')
    } else {
      console.log(file.mimetype)
      cb({ error: 'Mime type not supported' })
    }
  }
})


var upload = multer({ storage: storage })
Run Code Online (Sandbox Code Playgroud)

然后在端点上自己做:

var upload = multer({storage}); 
  router.post('/song', upload.any(), function(req, res) { 
  ...  
});
Run Code Online (Sandbox Code Playgroud)

这可能比您的方法更清晰,我认为提供了您正在寻找的功能,因为它可以让您更精细地控制保存这些文件。(由@cristian 编辑)