[英]Cordova FileTransfer Download - always returns error 3
我在使用cordova插件文件传输时遇到了一些问题。 那是我的代码:
window.requestFileSystem(
LocalFileSystem.PERSISTENT,
0,
function onFileSystemSuccess(fileSystem) {
fileSystem.root.getFile(
"dummy.html", {create: true, exclusive: false},
function gotFileEntry(fileEntry) {
var sPath = fileEntry.fullPath.replace("dummy.html", "");
var fileTransfer = new FileTransfer();
fileEntry.remove();
fileTransfer.download( 'http://cordova.apache.org/images/cordova_bot.png', sPath + photo.original_name,
function (theFile) {
alert('success: ' + JSON.stringify(theFile));
console.log("download complete: " + theFile.toURI());
// showLink(theFile.toURI());
},
function (error) {
alert('error: ' + JSON.stringify(error));
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code: " + error.code);
},
true
);
})
},
function (error) {
alert('error request: ' + JSON.stringify(error));
}
);
正在返回 fileTransfer.download 的错误回调,错误代码为 3,http 401。我已经更新了 File 和 FileTransfer 插件,我的cordova 版本是4.3.0。 还检查了我的 config.xml
<access origin="*" />
但它在那里。 我尝试添加标题 Connection: close,但没有结果。 也尝试将下载的第 4 个参数设置为其默认值 (false) - 不走运。
在安卓平板电脑上测试。
有人吗? 谢谢!
刚刚找到了我的问题的“解决方案”。 我所做的是将文件传输插件版本从 0.5.0 降级到 0.4.8。
如果有人遇到类似的问题,请执行以下操作:
就是这样。 似乎运行良好,至少返回了成功回调,并没有真正测试更多。
我个人不会创建一个文件然后删除它只是为了获取目录 URL。 您应该能够通过执行fileSystem.root.toURL()
来获得它 - fileSystem.root 是一个 DirectoryEntry,因此包含您希望在 DirectoryEntry 上看到的方法。
就是快一点。
更新
如果您倾向于使用文件删除方法,则应该在 FileEntry 上使用 toURL(),而不是 fullPath。 我认为 toURL() 返回一个可以在整个 HTML 应用程序中使用的 URL。
但正如我所说, fileSystem.root.toURL() 更可取。 示例代码如下:
因此,您的代码变为:
window.requestFileSystem(
LocalFileSystem.PERSISTENT,
0,
function (fileSystem) {
var url = 'http://cordova.apache.org/images/cordova_bot.png',
dir = fileSystem.root.toURL() + photo.original_name,
ft = new FileTransfer();
ft.download(url, dir,
function (fileEntry) {
alert('Downloaded!');
},
function (error) {
alert('Download error');
console.log(dir);
}
);
},
function (error) {
alert('Error getting file system');
}
);
试试看,看看会发生什么。 听起来可能很愚蠢,但我认为photo.original_name
已定义? 目录和文件名之间有一个“/”?
如果您的远程文件需要 VPN 访问,请确保您的设备已连接到 VPN。
就我而言,我没有连接到设备上的 VPN。
只需将下载网址更改为http://www .{{Domain name}}/abc.pdf
使用带有 www 的完整网址
这对我有用
let pathToDownload = `${cordova.file.externalDataDirectory}`;
let fileTransfer = new FileTransfer();
let url = encodeURI(`https://cordova.apache.org/images/cordova_bot.png`);
fileTransfer.download(url, pathToDownload + "image.png",
(fileEntry) => {
console.log('Downloaded!');
},
(error) => {
console.log('Download error');
},
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.