Cordova XMLHttpRequest 文件下载

Posted

技术标签:

【中文标题】Cordova XMLHttpRequest 文件下载【英文标题】:Codrova XMLHttpRequest File Download 【发布时间】:2018-12-08 02:08:33 【问题描述】:

我正在使用 Cordova 并尝试使用 XMLHttpRequest 下载文件

我正在尝试使用这个示例

https://cordova.apache.org/blog/2017/10/18/from-filetransfer-to-xhr2.html

这是我的代码

var fileName = "test.mp3";
var dlUrl = "http://myserver.com/down.php?id=123";
var fileSystem = cordova.file.externalApplicationStorageDirectory + "myfolder/downloads";

window.resolveLocalFileSystemURL(fileSystem, function (dir) 

dir.getFile(fileName, create: true, function (file) 

var oReq = new XMLHttpRequest();

oReq.addEventListener("progress", updateProgress);
oReq.addEventListener("load", transferComplete);
oReq.addEventListener("error", transferFailed);
oReq.addEventListener("abort", transferCanceled);

// Define how you want the XHR data to come back
oReq.responseType = "blob";

// I have added my domain to Content-Security-Policy <meta>
oReq.open("GET", dlUrl, true);

oReq.onload = function (oEvent) 

var blob = oReq.response; // Note: not oReq.responseText

if (blob) 

var url = window.URL.createObjectURL(blob);
alert( url );

 else 
alert('we didnt get an XHR response!');

;

oReq.send(null);

如果我通过浏览器访问我的 php 下载脚本,那么它将毫无问题地下载我的 .mp3 文件。所以我假设我的文件服务器脚本运行良好。

当我运行应用脚本时,Cordova 将在我想要的位置创建一个空文件。

XMLHttpRequest 下载请求运行时没有错误,但它实际上并未将获取的数据存储在 Cordova 创建的文件中。该文件只是空的。

当我回显 blob 的 URL 时,它不在我使用 Cordova 定位的文件夹中,而只是“file:///”,然后是一长串乱码,我假设临时文件存储在某个地方。

问题是:如何将下载的数据实际存储在 Cordova 正在创建的文件中?

谢谢。

【问题讨论】:

【参考方案1】:

想通了……

使用以下科尔多瓦函数

saveFile(file, blob);

【讨论】:

以上是关于Cordova XMLHttpRequest 文件下载的主要内容,如果未能解决你的问题,请参考以下文章

Cordova Async XMLHttpRequest().open 在 Android 中不起作用

无法使用 XMLHttpRequest 绘制音频文件的波形

从本地文件系统文件条目创建createObjectURL

cordova+vue构建app进阶

PhoneGap/Cordova、波纹仿真器、CORS 和 JSONP

Cordova 应用程序的自定义“未找到”