繁体   English   中英

Cordova FileTransfer 下载 - 总是返回错误 3

[英]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。

如果有人遇到类似的问题,请执行以下操作:

  1. 通过运行“cordova plugins list”和“cordova plugin remove name_from_list ”删除现有的文件传输插件
  2. 前往https://github.com/apache/cordova-plugin-file-transfer/releases下载 0.4.8 版本的 zip 文件。
  3. 在cordova 应用程序的根目录中解压缩文件
  4. 运行'cordova plugin add path_to_unzipped_folder '

就是这样。 似乎运行良好,至少返回了成功回调,并没有真正测试更多。

我个人不会创建一个文件然后删除它只是为了获取目录 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM