如何使用 multer 存储引擎获取多个上传流?
How can I get multiple upload stream with multer storage engine?
我正在制作一个 multer 存储引擎,它在客户端和 S3 服务器之间建立流连接。
在流的中间,我的代码检查块并将其发送到 S3。
我可以从 node.js 服务器获取文件流。但是当我请求文件数组上传时,节点检查器只显示一个流。我该怎么办?
流引擎片段
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) => {
});
我刚刚在 npm 上发布了这个流式 multipart/form-data
解析器 form-parser:
您应该能够执行以下操作:
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
我想你可以添加一些日志到 https://github.com/expressjs/multer/blob/master/lib/make-middleware.js 来检查。
目前,我在客户端使用 axios 通过 multer 将多个文件发送到服务器。我可以看到函数中的所有文件
busboy.on('file', function (fieldname, fileStream, filename, encoding, mimetype),
但是一次只有一个文件,这个函数会调用自定义存储的_handfile函数,所以我认为这是你问题的原因。
希望对您有所帮助
我正在制作一个 multer 存储引擎,它在客户端和 S3 服务器之间建立流连接。
在流的中间,我的代码检查块并将其发送到 S3。
我可以从 node.js 服务器获取文件流。但是当我请求文件数组上传时,节点检查器只显示一个流。我该怎么办?
流引擎片段
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) => {
});
我刚刚在 npm 上发布了这个流式 multipart/form-data
解析器 form-parser:
您应该能够执行以下操作:
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
我想你可以添加一些日志到 https://github.com/expressjs/multer/blob/master/lib/make-middleware.js 来检查。
目前,我在客户端使用 axios 通过 multer 将多个文件发送到服务器。我可以看到函数中的所有文件
busboy.on('file', function (fieldname, fileStream, filename, encoding, mimetype),
但是一次只有一个文件,这个函数会调用自定义存储的_handfile函数,所以我认为这是你问题的原因。
希望对您有所帮助