CODE
download: function (req, res) {
var id = req.param('id');
if (!id) {
return res.notFound();
}
var Grid = require('gridfs-stream');
var fs = require('fs');
var grid = new Grid(gridDb, mongo);
Document.findOneById(id.trim()).exec(function (err, doc) {
if (err) {
return res.serverError(err);
}
if (!doc) {
return res.notFound();
}
grid.collection('document').findOne({idStr: doc.id}, function (err, file) {
if (err) {
return res.serverError(err);
}
if (file) {
if (doc.contentType = "application/pdf") {
res.set({
'Content-Type': 'application/octet-stream',
'Content-Disposition': 'attachment; filename=' + doc.filename,
'Content-Length': file["length"]
});
} else {
res.set({
'Content-Type': file.contentType,
'Cache-Control': 'public',
'Pragma': 'public',
'ETag': file['md5'],
'Accept-Ranges': 'bytes',
'Content-Length': file["length"]
});
}
sails.log("re")
var readstream = grid.createReadStream({_id: id, root: 'document'});
return readstream.pipe(res);
} else {
return res.notFound();
}
});
});
问题
此代码从gridFs下载文件。除了safari中的pdf文件外,它适用于所有类型文件的所有浏览器。任何人都可以说代码有什么问题,或者这可能是Safari特有的错误? 我还尝试了以下代码:
res.set({
'Content-Disposition': 'attachment; filename=' + doc.filename,
'Content-Type': 'application/pdf',
'Content-Length': file["length"],
'Content-Transfer-Encoding': 'binary',
'Cache-Control': 'public',
'Pragma': 'public',
'ETag': file['md5']
});