簡體   English   中英

如何在 Javascript 中從 Chrome iOS 下載 blob 文件?

[英]How to download a blob file from Chrome iOS in Javascript?

如何在 Javascript 中從 Chrome iOS 下載 blob 文件?

我正在從 iOS 下載文件(pdf、excel、txt、png)。 iOS 沒有文件系統,這對下載來說是個問題。 我創建了一個代碼,如果需要,它會根據操作系統和導航器下載一個 blob 文件。 它在桌面(最新版本的 Chrome 和 IE)、移動 Android(Chrome、本機導航器)和 iOS iPad2 (Safari) 上運行良好。

現在,Chrome iOS 應該像 Safari mobile 一樣,但是算法不起作用,Chrome iOs 通過在新選項卡中打開來下載文件,但頁面是空的。

我創建了自己的 blob 來創建 downloadUrl。

這是下載功能的一部分。

    var URL = window.URL || window.webkitURL;
    var downloadUrl = URL.createObjectURL(iobBLOB);
    var newWindow = null;   

    if (typeof a.download === 'undefined') {
            var newWindow = null;
            newWindow = window.open(downloadUrl, '_blank');
            setTimeout(function() {
                newWindow.document.title = isbFilename;
            }, 10);
    }

更多細節

在 iPad 2 和 iPhone 4 上調試

嘗試下載 Excel、pdf、txt 和 Png 文件。

這些設備沒有文件系統。

感謝您幫助我...如果您需要更多信息,請告訴我這是我的第一個問題。

搜索后,此解決方案似乎在 ChromeiOS 和 Safari 上運行良好。 我在這篇文章“https://stackoverflow.com/questions/24485077/how-to-open-blob-url-on-chrome-ios?answertab=oldest#tab-top”上找到了它。 這解決了我的問題:

//isbContentType i.e. 'text/plain'
//isbFilename i.e. 'This is a title'
 var reader = new FileReader();
    reader.onload = function(e) {
       var bdata = btoa(reader.result);
       var datauri = 'data:' + isbContentType + ';base64,' + bdata;
       window.open(datauri);
       newWindow = setTimeout(function() {
           newWindow.document.title = isbFilename;
       }, 10);
    };
    reader.readAsBinaryString(iobBLOB);

我相信有一種方法可以下載 blob 文件,但事實並非如此。 不管怎么說,還是要謝謝你

var reader = new FileReader();
var out = new Blob([response.data], { type: 'application/pdf' });
reader.onload = function(e) {
    window.location.href = reader.result;
}
reader.readAsDataURL(out);

// var blob = new Blob([response.data], { type: "application/pdf" });
var fileURL = URL.createObjectURL(out);
var a = document.createElement('a');
a.href = fileURL;
a.target = '_blank';
a.download = 'lkn_' + id + '.pdf';
document.body.appendChild(a);
a.click();

我們有一個 wordpress 站點,在下載 csv 文件的回調中,我們必須為 ipad/pod/phone 特定下載添加以下內容;

if(stristr($_SERVER['HTTP_USER_AGENT'], 'ipad') OR stristr($_SERVER['HTTP_USER_AGENT'], 'iphone') OR stristr($_SERVER['HTTP_USER_AGENT'], 'ipod')) {
      header("Content-Type: application/octet-stream");   
} else {
      header('Content-Type: application/vnd.ms-excel');   
}

暫無
暫無

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

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