【问题标题】:How can I get multiple upload stream with multer storage engine?如何使用 multer 存储引擎获取多个上传流?
【发布时间】:2018-09-11 09:26:42
【问题描述】:

我正在制作一个 multer 存储引擎,它在客户端和 S3 服务器之间建立流连接。

在流的中间,我的代码检查块并将其发送到 S3。

我可以从 node.js 服务器获取文件流。但是当我请求上传文件数组时,节点检查器只显示一个流。我该怎么办?

流引擎 sn-p

CustomStreamEngine.prototype._handleFile = function _handleFile (req, file, cb) {
    // for inspect
    req.files.length    // 1 
    file;

};

请求控制器

var streamStorage = multer({
    storage: streamEngine()
});

dev.post('/rec_test', streamStorage.array('source'), (req, res, next) => {

});

【问题讨论】:

    标签: node.js multer


    【解决方案1】:

    我刚刚在 npm 上以form-parser 发布了这个流式multipart/form-data 解析器:

    您应该能够做到以下几点:

    dev.post('/rec_test', async (req, res, next) => {
      // Parse request
      await parser(req, async ({ fieldType, fieldName, fieldContent }) => {
        // Log all fields
        console.log({ fieldType, fieldName, fieldContent });
    
        // Handle 'source' file fields
        if (fieldType === 'file' && fieldName === 'source[]') {
          // Get file info
          const { fileName, fileType, fileStream } = fieldContent;
    
          // Upload fileStream to S3 :-)
        }
      });
    });
    

    希望对你有帮助。

    K

    【讨论】:

    • 谢谢!由于某种原因,我还没有尝试过。但是使用 async / await 的方法似乎是 ES6 的一个好习惯。我会尽快尝试使用表单解析器。
    • 我有同样的问题:使用我的自定义存储引擎,我可以上传一张图像,并检索流;但是当它不止一个时,只有第一个会出现在正文的 req.files 中。看不出@kasperneist 的回答有什么帮助。欢迎任何建议!
    【解决方案2】:

    我想你可以添加一些日志到https://github.com/expressjs/multer/blob/master/lib/make-middleware.js 来检查。 目前,我在客户端使用 axios 通过 multer 将多个文件发送到服务器。我可以看到函数中的所有文件 busboy.on('file', function (fieldname, fileStream, filename, encoding, mimetype), 但是一次只有一个文件,而且这个函数会调用自定义存储的_handfile函数,所以我认为这是你问题的原因。 希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2020-12-01
      • 1970-01-01
      • 2021-07-25
      • 2017-01-13
      • 2020-01-11
      • 2010-12-03
      • 2019-03-17
      • 2021-04-09
      • 2023-03-11
      相关资源
      最近更新 更多