14

如何在 Javascript 中从 Chrome iOS 下载 blob 文件?

我正在从 iOS 下载文件(pdf、excel、txt、png)。iOS 没有文件系统,这对下载来说是个问题。如果需要,我创建一个代码,根据操作系统和导航器下载 blob 文件。它在桌面(Chrome 和 IE 的最新版本)、移动 Android(Chrome、本机导航器)和 iOS iPad2(Safari)上运行良好。

现在,Chrome iOS 应该像 Safari 移动版,但算法不起作用,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 文件。

设备没有文件系统。

感谢您帮助我...如果您需要更多信息,请告诉我,这是我的第一个问题。

4

3 回答 3

3

经过搜索,这个解决方案似乎在 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 文件,但事实并非如此。不管怎么说,还是要谢谢你

于 2015-03-26T20:43:01.157 回答
2
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();
于 2020-08-30T09:50:40.060 回答
1

我们有一个 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');   
}
于 2020-01-10T23:58:58.230 回答