我正在开发一个Web应用程序,我将上传的图像存储在MongoDB的GridFS中。我在尝试将可读流传输到响应时遇到问题,因为它有时 ,但不是每次都有效。所有图像都存储在GridFS中,并且没有任何文件损坏,因为我能够使用mongofiles提取文件并查看它,图像看起来与上传的文件完全一样。
对某些图像的响应进行管道处理,但有些图像没有,我正在解决这个问题 - 我无法查明问题。
我正在使用gridfs-stream(1.1.0)和ExpressJS(4.0.0),这是响应路线:
exports.show = function (req, res, next) {
var id = req.params.id;
GridFS.exist({ _id: id }, function (err, exist) {
if (err) return handleError(err);
if (!exist) return res.send(404);
try {
var readStream = GridFS.createReadStream({ _id: gridId }).pipe(res);
} catch (err) {
return res.send(500, err);
}
});
};
这是上传路线:
exports.create = function (req, res, next) {
var mime = req.files.file.mimetype;
var image = req.files.file.path;
var filename = req.files.file.originalname;
var writeStream = GridFS.createWriteStream({
filename: filename,
mode: 'w',
content_type: mime
});
writeStream.on('close', function (file) {
console.log(file);
return res.json(200, { status: 'success', url: '/api/images/' + file._id });
});
fs.createReadStream(image).pipe(writeStream);
};
正如我所提到的,这适用于某些图像,但不适用于所有图像。我正在使用Node 0.12.0和MongoDB 2.6.8
告诉我您是否需要任何其他信息,我会尽力提供。