我正在制作一个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) => {
});
答案 0 :(得分:1)
我刚刚在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 :-)
}
});
});
希望它有所帮助。
ķ
答案 1 :(得分:1)
我认为您可以向https://github.com/expressjs/multer/blob/master/lib/make-middleware.js添加一些日志以进行检查。
目前,我在客户端上使用axios通过multer将多个文件发送到服务器。我可以看到函数中的所有文件
busboy.on('file', function (fieldname, fileStream, filename, encoding, mimetype),
,但一次只有一个文件,此函数将调用自定义存储的_handfile函数,因此我认为这是您遇到问题的原因。
希望它可以帮助您