我在nodejs / express中有一个应用程序,它生成一个PDF并在响应中将其流式传输。当我通过curl或wget执行请求时,文件下载就好了。
当我在浏览器上执行请求时,文件未正确下载。好奇的是,文件大小更大(使用wget / curl下载时为59k,但在浏览器中下载时为101k)
这是生成响应的代码段:
fs.readFile('file.pdf', function(err, data) {
res.setHeader('Content-Disposition', 'attachment; filename=' + req.params.id + '.pdf');
res.setHeader('Content-Type', 'application/pdf');
res.setHeader('Content-Length', data.length);
res.status(200).end(data);
});
我不知道我是否错过了标题,或者请求中是否有我应该关注的内容我不是,但我不知道为什么会这样。有什么想法吗?
答案 0 :(得分:0)
自己想出来。
必须改变这一行
res.status(200).end(data);
到
res.status(200).end(data, 'binary');
一旦我改变它,pdf就完美地发送了。
如果未设置编码,Express会尝试将其写为UTF-8(产生不需要的结果)。
每当通过Express发送二进制文件时都会考虑到这一点。