pdf - 无法在 Safari 上下载 pdf blob url

标签 pdf safari filereader

目前使用 FileReader 打开和查看适用于 Chrome 的 PDF。但是,当在 Safari 上打开 pdf 并单击下载按钮时,没有任何 react 。

var reader = new FileReader();
reader.onloadend = function(e) {
    $window.location.href = reader.result;
}
reader.readAsDataURL(file);

最佳答案

在花了一整天研究类似问题之后,我明白了问题出在哪里,所以我现在可以与您分享我的知识。

基本上,这种问题是在渲染 Blob 时产生的。在已打开的浏览器选项卡中,因此您的页面 url 会发生以下变化:
blob:http://localhost:8080/9bbeffe1-b0e8-485d-a8bd-3ae3ad9a0a51
要求 pdf 的错误程序是这样的:
var fileBlob = new Blob([response.data], {type: 'application/pdf'}); window.location.hfref = fileBlob;
为什么这不起作用?
好吧,您可以看到页面上呈现的 pdf,因此您可能会误以为您的 pdf 加载得很好。但是,如果您尝试刷新页面或在您的机器上下载 pdf,它不起作用。

什么?
所以,最初我真的想在浏览器周围使用某种黑魔法,然后我想出了问题:
该文件不存在,但它唯一的缓存存储在浏览器中。因此,当您生成 blob 并重定向当前选项卡以指向生成的 blob url 时,您将丢失缓存。

现在一切都说得通了吧?

  • 您在服务器上请求文件
  • 浏览器将缓冲区存储在选项卡内
  • 您将页面 url 指向读取缓冲区
  • 您看到 pdf 但同时丢失了缓冲区信息

  • 您唯一能做的就是在新选项卡中打开 Blob 网址:
    window.open(fileBlob, '_blank');
    问题解决了。

    关于pdf - 无法在 Safari 上下载 pdf blob url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37817591/

    相关文章:

    javascript - 在加载时使用 FileReader 从文件中获取文本

    pdf - 如何全局替换PDF中的字体

    PDF 优化 Acrobat 与 Ghostscript

    javascript - 为什么带有 SVG 的 CSS 剪辑路径在 Safari 中不起作用?

    sql - 从 Safaris 客户端数据库中选择随机行

    http - golang,从文件中读取内容,并在 HTTP 请求中作为正文数据发送

    javascript - 将文件内容传递给外部变量

    pdf - itext pdf,下面有图像和文本列表

    android-在点击通知时打开默认的pdf查看器

    CSS 背景属性不适用于 Safari 5.7.1