【发布时间】:2014-07-22 18:55:15
【问题描述】:
所以我不知道是什么时候,但显然 Chrome 发生了变化,导致无法在浏览器中查看 PDF。在 Firefox 或 IE 中查看这些工作;这似乎是 Chrome 独有的问题。
到目前为止,我的做法是这样的。用户 POST 数据到服务器,这对 PDF 填充有一定的作用,并将 PDF 发送回浏览器。我们正确使用了Content-Disposition、Content-Length 和Content-Type 标头(我假设):
Content-Disposition: "inline; filename=\"some-pdf.pdf\""
Content-Length: "1860799"
Content-Type: "application/pdf"
Chrome 拒绝使用浏览器内的 PDF 查看器加载这些文件有什么具体原因吗?
编辑:
似乎 Chrome 在 POST 到服务器时没有加载内联文件。
工作示例:
var express = require('express');
var fs = require('fs');
var app = express();
app.listen(3000, function() {
console.log('Listening on http://localhost:3000');
});
app.get('/', function(req, res, next) {
fs.stat('./some-pdf.pdf', function(e, stats) {
if(e) throw e;
var stream = fs.createReadStream( './some-pdf.pdf' );
res.setHeader('Content-disposition', 'inline; filename="some-pdf.pdf"');
res.setHeader('Content-Length', stats.size);
res.setHeader('Content-type', 'application/pdf');
stream.pipe(res);
});
});
非工作示例:
var express = require('express');
var fs = require('fs');
var app = express();
app.listen(3000, function() {
console.log('Listening on http://localhost:3000');
});
app.get('/', function(req, res, next) {
res.send('<form method="POST"><input type="submit", value="Get PDF"></form>');
});
app.post('/', function(req, res, next) {
fs.stat('./some-pdf.pdf', function(e, stats) {
if(e) throw e;
var stream = fs.createReadStream( './some-pdf.pdf' );
res.setHeader('Content-disposition', 'inline; filename="some-pdf.pdf"');
res.setHeader('Content-Length', stats.size);
res.setHeader('Content-type', 'application/pdf');
stream.pipe(res);
});
})
【问题讨论】:
-
经过一番研究,似乎 Chrome 拒绝使用 POST 请求加载内联文件...编辑答案以反映我的发现。
标签: html node.js google-chrome pdf http-headers