2016-06-14 371 views
1

当前使用FileReader打开并查看适用于Chrome的PDF。但是,当在Safari上打开PDF并单击下载按钮时,什么都不会发生。无法在Safari上下载pdf blob url

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

这也发生在我身上。 @Tyler你找到了解决方案吗? –

+0

@AbhishekPrakash我没有,我注意到IE浏览器不允许超过一定长度的BLOB URL,所以我切换到了服务器解决方案。 –

回答

1

已经花费了一整天的时间类似的问题的工作,我明白问题出在哪里了,所以我现在可以跟大家分享我的知识。

基本上,当渲染已经打开浏览器选项卡内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,则不起作用。

WTH? 所以,最初我真的想到浏览器中出现某种黑魔法,然后我发现了这个问题: 该文件不存在,但它的唯一缓存存储在浏览器内。因此,当您生成blob并将当前选项卡重定向到指向生成的blob url时,您将失去缓存。

现在一切都合适吗?

  1. 您的服务器
  2. 浏览器中存储选项卡
  3. 你点你的网页网址读取缓冲区
  4. 你看PDF中,但在同一时间缓冲对申请文件,失去了缓冲信息

唯一觉得你可以做的,与开放的Blob网址在新标签:

window.open(fileBlob, '_blank');

问题已解决。