FileTransfer Cordova下载路径

时间:2016-02-19 10:30:53

标签: android iphone cordova

我使用Cordova(5.4)为Android和Iphone创建应用程序。一切顺利,除了我想使用Cordova的插件下载图像" FileTransfer"我在路上遇到了一些问题。

如果我像这样使用FileTransfer:

       uri = encodeURI('http://example.com/myImage.png'),
            fileURL = '/sdcard/Download/' + 'myImage.png',
fileTransfer.download(
                uri,
                fileURL,
                function (entry) {
                    console.log("download complete: " + entry.fullPath);
                },
                function (error) {
                    console.log(error);
                },
                false,
                {
                    headers: {
                        "authorization": 'Bearer ' + token
                    }
                }
            );

这很好用。但我想要一条适用于Android和Iphone的路径(不是静态路径),如果可能的话,用户可以直接在他们的图库中看到这些图像。

检查我尝试过的插件说明:

fileURL = 'cdvfile://localhost/persistent/myImg.png'

但是这与FileTrasferError失败了:

  

" /data/data/com.aco.plus/files/files/myImg.png:打开失败:ENOTDIR(不是目录)"

检查周围的答案我也试过了:

uri = encodeURI('http://example.com/myImage.png');

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) {

            fileTransfer.download(
                uri,
                fileSystem.root.toURL() + '/' + 'myImg.png',
                function (entry) {
                    console.log("download complete: " + entry.fullPath);
                },
                function (error) {
                    console.log(error);

                },
                false,
                {
                    headers: {
                        "authorization": 'Bearer ' + token
                    }
                }
            );
        });

我也遇到了同样的错误。

我很失落。谁知道我该怎么办?我非常确定必须比静态路线更好地做到这一点。

2 个答案:

答案 0 :(得分:2)

@Luisma,

请使用cordova文件和文件传输插件找到在设备中编写pdf文件的示例代码段:

var fileTransfer = new FileTransfer();

if (sessionStorage.platform.toLowerCase() == "android") {
    window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, onFileSystemSuccess, onError);
} else {
    // for iOS
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, onError);
}

function onError(e) {
    navigator.notification.alert("Error : Downloading Failed");
};

function onFileSystemSuccess(fileSystem) {
    var entry = "";
    if (sessionStorage.platform.toLowerCase() == "android") {
        entry = fileSystem;
    } else {
        entry = fileSystem.root;
    }
    entry.getDirectory("Cordova", {
        create: true,
        exclusive: false
    }, onGetDirectorySuccess, onGetDirectoryFail);
};

function onGetDirectorySuccess(dir) {
    cdr = dir;
    dir.getFile(filename, {
        create: true,
        exclusive: false
    }, gotFileEntry, errorHandler);
};

function gotFileEntry(fileEntry) {
    // URL in which the pdf is available
    var documentUrl = "http://localhost:8080/testapp/test.pdf";
    var uri = encodeURI(documentUrl);
    fileTransfer.download(uri, cdr.nativeURL + "test.pdf",
        function(entry) {
            // Logic to open file using file opener plugin
        },
        function(error) {
            navigator.notification.alert(ajaxErrorMsg);
        },
        false
    );
};

答案 1 :(得分:1)

对于进入应用程序的路径,我喜欢使用

https://github.com/apache/cordova-plugin-file

这会映射每个操作系统上的不同路径,因此它对您来说是透明的,即使通过不同的SO或版本,它也只是选择正确的路径。

快乐的编码!