2016-06-14 456 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');

問題已解決。