簡體   English   中英

Blob createObjectURL 下載在 Chrome 中不起作用

[英]Blob createObjectURL download not working in chrome

下面的代碼在 Chrome 中顯示“找不到文件”錯誤,但相同的代碼適用於 chrome 中的其他一些環境,並且在添加了一些時間延遲后它正在工作。
請告知我當地環境所需時間延遲的原因。

var a = document.createElement('a');
a.style = "display: none";  
var blob = new Blob(data, {type: "application/octet-stream"});
var url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);     

撤銷 blob:// URI 是同步操作,而下載文件則不是。

盡管數據可以在 memory 中,因此下載速度非常快,但情況並非總是如此。 Blob 的數據甚至可能不在一個地方,例如一些blobParts可能在 memory 中,其他一些在用戶磁盤上,甚至在通過網絡訪問的共享文件夾中。 此外,實際上可以異步地簡單地請求操作系統訪問寫入。

因此,當您調用revokeObjectURL時,瀏覽器可能還沒有時間將您的文件寫入磁盤,當它嘗試這樣做或訪問新的 blobPart 時,在提供的地址上沒有更多可用的指針。

不幸的是,沒有任何事件讓我們知道何時完成對磁盤的寫入,至少在本機文件系統 API正式發布之前,我們現在能做的最好的事情就是在撤銷 blob 之前等待相當長的時間:// 網址。
作為參考, FileSaver.js確實等待了 40 秒。

我已經添加了如下所示的 setimeout 現在它工作正常

setTimeout(函數(){window.URL.revokeObjectURL(url);}, 3000);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM