Safari无法从服务器下载pdf文件

时间:2014-10-24 14:57:20

标签: node.js mongodb pdf safari gridfs-stream

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']
});

0 个答案:

没有答案