从 Cordova 中的 FileTransfer 下载的文件不完整
Incomplete file download from FileTransfer in Cordova
我正在尝试使用 Phonegap Build 创建应用程序,同时使用多个插件将在线文件下载到设备的 SD 卡。使用以下链接:
我)https://www.tutorialspoint.com/cordova/cordova_file_transfer.htm
ii)https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file-transfer/index.html#download
我能够让这段代码工作:
function downloadFile() {
var fileTransfer = new FileTransfer();
fileTransfer.download(
"http://developer.android.com/assets/images/home/ics-android.png",
"file:///storage/sdcard0/aw2uin.png",
function(entry) {
alert("download complete: 1" + entry.toURL);
},
function(error) {
alert("download error source " + error.source);
alert("download error target " + error.target);
alert("upload error code" + error.code);
});
}
然而 问题在于,尽管获得了 successCallBack,但文件仅部分下载。 Eg.ics-android.png :文件大小为 14.7kB,但结果大小为 0B。另一个 125kB 文件的示例导致下载 104.55kB。
我的 config.xml 具有以下权限:
<plugin name="cordova-plugin-file" spec="~4.3.1" />
<plugin name="cordova-plugin-file-transfer" spec="~1.6.1" />
<plugin name="cordova-plugin-network-information" spec="~1.3.1" />
<plugin name="cordova-plugin-whitelist" version="1.3.1" />
<access origin="*" /><!--subdomains="true" /> -->
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root" />
<preference name="android-minSdkVersion" value="7" />
<preference name="android-installLocation" value="preferExternal" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-navigation href="*" />
我尝试寻找答案,但到目前为止,似乎没有多少其他人遇到过此错误。我哪里做错了?/我做错了什么?
设法让这个对我有用:
function downloadFile() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
alert('file system open: ' + fs.name);
var url = 'https://....';
// Parameters passed to getFile create a new file or return the file if it already exists.
fs.root.getFile('downloaded-image.png', { create: true, exclusive: false }, function (fileEntry) {
download(fileEntry, url, true);
}, alert("fail1"));
}, alert("fail2"));
}
function download(fileEntry, url, readBinaryData) {
var fileTransfer = new FileTransfer();
var fileURL = cordova.file.externalRootDirectory + "filename.png";
fileTransfer.download(
url,
fileURL,
function (entry) {
alert("Successful download...");
alert("download complete: " + entry.toURL());
if (readBinaryData) {
// Read the file...
readBinaryFile(entry);
}
else {
// Or just display it.
displayImageByFileURL(entry);
}
},
function (error) {
alert("download error source " + error.source);
alert("download error target " + error.target);
alert("upload error code" + error.code);
},
null, // or, pass false
{
//headers: {
// "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
//}
}
);
};
我正在尝试使用 Phonegap Build 创建应用程序,同时使用多个插件将在线文件下载到设备的 SD 卡。使用以下链接:
我)https://www.tutorialspoint.com/cordova/cordova_file_transfer.htm ii)https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-file-transfer/index.html#download
我能够让这段代码工作:
function downloadFile() {
var fileTransfer = new FileTransfer();
fileTransfer.download(
"http://developer.android.com/assets/images/home/ics-android.png",
"file:///storage/sdcard0/aw2uin.png",
function(entry) {
alert("download complete: 1" + entry.toURL);
},
function(error) {
alert("download error source " + error.source);
alert("download error target " + error.target);
alert("upload error code" + error.code);
});
}
然而 问题在于,尽管获得了 successCallBack,但文件仅部分下载。 Eg.ics-android.png :文件大小为 14.7kB,但结果大小为 0B。另一个 125kB 文件的示例导致下载 104.55kB。 我的 config.xml 具有以下权限:
<plugin name="cordova-plugin-file" spec="~4.3.1" />
<plugin name="cordova-plugin-file-transfer" spec="~1.6.1" />
<plugin name="cordova-plugin-network-information" spec="~1.3.1" />
<plugin name="cordova-plugin-whitelist" version="1.3.1" />
<access origin="*" /><!--subdomains="true" /> -->
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root" />
<preference name="android-minSdkVersion" value="7" />
<preference name="android-installLocation" value="preferExternal" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-navigation href="*" />
我尝试寻找答案,但到目前为止,似乎没有多少其他人遇到过此错误。我哪里做错了?/我做错了什么?
设法让这个对我有用:
function downloadFile() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {
alert('file system open: ' + fs.name);
var url = 'https://....';
// Parameters passed to getFile create a new file or return the file if it already exists.
fs.root.getFile('downloaded-image.png', { create: true, exclusive: false }, function (fileEntry) {
download(fileEntry, url, true);
}, alert("fail1"));
}, alert("fail2"));
}
function download(fileEntry, url, readBinaryData) {
var fileTransfer = new FileTransfer();
var fileURL = cordova.file.externalRootDirectory + "filename.png";
fileTransfer.download(
url,
fileURL,
function (entry) {
alert("Successful download...");
alert("download complete: " + entry.toURL());
if (readBinaryData) {
// Read the file...
readBinaryFile(entry);
}
else {
// Or just display it.
displayImageByFileURL(entry);
}
},
function (error) {
alert("download error source " + error.source);
alert("download error target " + error.target);
alert("upload error code" + error.code);
},
null, // or, pass false
{
//headers: {
// "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
//}
}
);
};