下面的代码片段按预期工作:它读取使用multer [ https://github.com/expressjs/multer]上传的文件并将其流式传输到gridfs中.我也能够将其从gridfs中抽出来. var target = gfs.createWriteStream({ filename: file
var target = gfs.createWriteStream({ filename: fileItem.originalname, mode: 'w', metadata: metaData }); fs.createReadStream(tempFile) .on('end', function () { console.log('File read and stored'); }) .on('error', function (err) { console.log('Error handling file ' + err); }) .pipe(target); // Attach new file to document list target.on('close', function (file) { filesUploadedList.push(file._id);
fileItem是通过迭代req.files.file获得的,这些文件是上传的文件.
但是,我正在试图找出multer的inMemory选项.如果我将其设置为true,则fileItem将填充缓冲区.只是要注意没有这个选项,fileItem的缓冲区/内容是空的,这就是为什么在上面的代码中从fileItem.location读取它.
用内容填充目标的最佳方法是什么? fs.createReadStream正在进行管道处理.
谢谢.
Ĵ
您可以使用 streamifier完成此操作.代码看起来应如下所示:streamifier.createReadStream(fileItem.buffer).pipe(target);
Multer不向磁盘写入任何内容,目标现在填充了正在上载的文件的缓冲区/内容.