在浏览器中查看PDF – 使用POST在Chrome中破解

所以我不知道什么时候,但显然Chrome已经发生了一些变化,在浏览器中浏览了PDF。 查看这些内部的Firefox或IE工作; 这似乎是一个纯Chrome的问题。

截至目前,我是如何做到这一点的。 用户将数据发布到服务器,这对PDF使用者来说有一些神奇的作用,并将PDF发送回浏览器。 我们正确地使用Content-DispositionContent-LengthContent-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浏览器的PDF查看器错误。 当您尝试保存PDF时,插件有时会重新请求要保存的页面。 如果它是一个HTTP Post,则存在内部错误,保存失败。

可以在这里看到: https : //code.google.com/p/chromium/issues/detail?id=224520