GridFS管道到Express响应问题

时间:2015-03-26 09:15:12

标签: node.js mongodb express gridfs

我正在开发一个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

告诉我您是否需要任何其他信息,我会尽力提供。

0 个答案:

没有答案