是否可以使用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();
});
};
我需要下载一个物理文件。但是下载功能什么也不返回。