javascript - node.js上传下载pdf文件

标签 javascript node.js mongodb gridfs gridfs-stream

框架:node.js/express.js/busboy/gridfs-stream(mongodb)

我正在使用 busboy 上传文件,然后使用 gridfs-stream 将文件存储在 mongodb gridfs 中。

                req.pipe(req.busboy);
                req.busboy.on('file', function (bus_fieldname, bus_file, bus_filename) {

                var writestream = gfs.createWriteStream({
                    filename: bus_filename,
                });

                bus_file.pipe(writestream);

                writestream.on('close', function (file) {
                    res.redirect('/xxxxx/');
                });
            });

下载很简单:使用g​​ridfs-stream的createReadStream从mongodb中读取内容,然后使用下面的代码发送到浏览器。

            gfs.findOne({_id: attachmentid}, function (err, file) {
            if (err || !file){
                res.send(404);
            }else{
                var fileName = file.filename;
                var readstream = gfs.createReadStream({_id: attachmentid});
                var buffer = "";
                readstream.on("data", function (chunk) {
                    buffer += chunk;
                });

                // dump contents to buffer
                readstream.on("end", function () {
                    res.set("Content-Disposition","attachment; filename=" + fileName);
                    res.send(buffer);
                });

            }

问题:当我上传一个 90kb 的 pdf 文件时,它上传正常。我看到 mongodb 中的大小是正确的。但是当我下载时,下载文件的文件大小约为165kb。存在不匹配。文本文件不会发生这种情况。当然这与数据类型有关。

有人可以帮忙吗?

最佳答案

将 gfs 读取流直接通过管道传递给响应。这对我有用

res.set("Content-Disposition","attachment; filename=" + fileName);
var readstream = gfs.createReadStream({_id: attachmentid});
readstream.pipe(res);

关于javascript - node.js上传下载pdf文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31176395/

相关文章:

php - 如何通过 JavaScript slider 实时更改 CSS 颜色值?

javascript - 为什么 Monad 的 bind() 方法必须返回一个 func,然后返回一个 Monad?

javascript - jQuery 简单数据传递 HTML

javascript - 将应用程序部署到 Heroku,ENV 变量不起作用

javascript - 打印所有mongoDB数据到字符串nodejs

java - 当我使用 @JsonProperty 通过 Spring 数据从 MongoDB 检索对象时出现空字段

javascript - MongoDB 迭代文档集合

javascript - 知道为什么这段代码不起作用吗?正文 > *

node.js - .prototyped 箭头函数的 this.function 未定义

mongodb - 如何在 Sitecore 中格式化 MongoDB 副本集的连接字符串?