【问题标题】:Viewing PDF Inside Browser - Broken in Chrome Using POST在浏览器中查看 PDF - 使用 POST 在 Chrome 中损坏
【发布时间】:2014-07-22 18:55:15
【问题描述】:

所以我不知道是什么时候,但显然 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 查看器加载这些文件有什么具体原因吗?

编辑:

似乎 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


【解决方案1】:

这是一个 Chrome PDF 查看器错误。当您尝试保存 PDF 时,有时插件会重新请求保存页面。如果是 HTTP Post,则存在内部错误,保存失败。

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

【讨论】:

  • Chrome 更新后这对我有用,但我没有重新运行上面的代码来验证。不过,这也可能取决于您如何处理服务器级别的重复请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2018-01-23
  • 2019-12-09
  • 2014-02-03
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多