0

是否可以使用Multer-GridFS-Storage下载上传到 MongoDb 集合的文件?

目前这是我得到的,我得到了正确的上传功能,但我需要下载存储在集合中的文件:

const storage = new GridStorage({
  url: gridfsDBString,
  file: (req, file) => {
    return new Promise((resolve, reject) => {
      const filename = path.parse(file.originalname).name + path.extname(file.originalname);
      const fileInfo = {
        filename: filename,
        bucketName: 'uploads'
      };
      resolve(fileInfo);
    });
  }
});
const upload = multer({
  storage
}).single('file');

exports.gridFsUpload = function(req, res) {
  upload(req, res, function(err) {
    if (req.file && req.file.id) {
      gfs.files.update({
        _id: req.file.id
      }, {
        $set: {
          metadata: req.body.projectId
        }
      }, function(err, updated) {
        if (err)
          return res.status(500).send(err);
        else
          return res.status(204).send();
      });
    } else {
      return res.status(400).send('Failed to upload file');
    }
  });
};

我尝试使用 Gridfs Stream 下载它,这是我的脚本:

exports.gridFsFilesDownload = function(req, res) {
  gfs.findOne({
    _id: mongoose.Types.ObjectId(req.params.id),
    root: 'uploads'
  }, function(err, file) {
    if (err) {
      return res.status(400).send(err);
    } else if (!file) {
      return res.status(404).send(err);
    }
    var readstream = gfs.createReadStream({
      _id: file._id,
      root: 'uploads'
    });
    console.log(file.length)
    res.set('Content-Type', file.contentType);
    res.set('Content-Disposition', 'attachment; filename="' + file.filename + '"');
    readstream.on('errror', function(err) {
      res.end();
    });
    readstream.pipe(res);
    return res.status(204).send();
  });
};

我需要下载一个物理文件。但是下载功能什么也不返回。

4

0 回答 0