在浏览器中查看PDF - 使用POST在Chrome中损坏

时间:2014-06-02 15:33:02

标签: html node.js google-chrome pdf http-headers

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

截至目前,我这样做是怎么回事。用户将数据POST到服务器,这对PDF填充有一定作用,并将PDF发送回浏览器。我们正确使用Content-DispositionContent-LengthContent-Type标题(我假设):

Content-Disposition: "inline; filename=\"some-pdf.pdf\""
Content-Length: "1860799"
Content-Type: "application/pdf"

Chrome拒绝使用浏览器内的PDF查看器加载这些文件有什么特定原因吗?

编辑:

在POST到服务器时,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);
  });
})

1 个答案:

答案 0 :(得分:1)

这是Chrome PDF Viewer错误。当您尝试保存PDF时,插件有时会重新请求保存页面。如果它是HTTP Post,则会出现内部错误,并且保存失败。

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