如何用Javascript从Chrome iOS下载blob文件



如何用Javascript从Chrome iOS下载blob文件

我正在从iOS下载文件(pdf,excel,txt,png)。iOS没有文件系统,这对下载来说是个问题。我创建了一个代码,根据操作系统和导航器(如果需要)下载blob文件。它在桌面(Chrome和IE的最新版本)、移动安卓(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);
    }

更多详细信息

在iPad2和iPhone4 上调试

正在尝试下载excell、pdf、txt和Png文件。

设备没有文件系统。

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

经过搜索,该解决方案似乎在ChromeiOS和Safari上运行良好。我在这篇关于如何在Chrome iOS上打开Blob URL的帖子中找到了它。这解决了我的问题:

//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');   
}

最新更新