在浏览器中查看PDF – 使用POST在Chrome中破解
所以我不知道什么时候,但显然Chrome已经发生了一些变化,在浏览器中浏览了PDF。 查看这些内部的Firefox或IE工作; 这似乎是一个纯Chrome的问题。
截至目前,我是如何做到这一点的。 用户将数据发布到服务器,这对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浏览器的PDF查看器错误。 当您尝试保存PDF时,插件有时会重新请求要保存的页面。 如果它是一个HTTP Post,则存在内部错误,保存失败。
可以在这里看到: https : //code.google.com/p/chromium/issues/detail?id=224520
- 如何将iBeacon闪存/升级到Eddystone?
- 是否可以在Google Chrome扩展中embeddedHTTP服务器?
- 无头Chrome浏览器屏幕截图的最大高度为16,384px?
- 使用从chrome到node-http2服务器的HTTP / 2时,请参阅多个TCP连接
- 有没有办法正则expression式引用Node.js中的string?
- 为什么一个<image>标签被jQuery改变了<img>标签,在chrome中
- 客户端websocket限制消息长度
- 对JavaScript文件的更改不会立即生效。 gulp browserify任务可能存在问题
- Node.js – Chrome和Safari中的两个连接?