所以我不知道什么时候,但显然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在发送到服务器时不加载内联文件。
工作的例子:
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 PDF浏览器错误。当您尝试保存PDF时,有时插件会重新请求要保存的页面。如果它是一个HTTP Post,则有一个内部错误,并且保存失败。
可以在这里看到:https://code.google.com/p/chromium/issues/detail?id=224520