如何使用Phonegap 6.x下载文件?

时间:2016-05-17 13:28:59

标签: javascript android cordova

为什么使用Phonegap将文件从远程服务器下载到Android应用程序的文件夹中非常困难?

我差不多一周了。我阅读了每一篇文章并尝试了我发现的每个例子。我读到了不同版本的Phonegap之间报告的差异和错误。我阅读并研究了有关cordova-plugin-file-transfercordova-plugin-file的官方文档。我阅读了有关在config.xml文件中正确配置权限和白名单的信息。

我还想知道我没有使用手机的文件资源管理器查看下载的文件,因为Android权限将该文件夹设置为私有,因此我根植了我的手机。

但以上都没有奏效。

这是我的代码。请,如果你想提供你的贡献,不要简单地复制/粘贴其他来源的代码 - 正如我经常看到的那样 - 因为我已经自己做了。

CONFIG.XML(我使用的是Phonegap Build)

<?xml version="1.0" encoding="UTF-8" ?>
<widget xmlns   = "http://www.w3.org/ns/widgets"
    xmlns:gap   = "http://phonegap.com/ns/1.0"
    id          = "com.my_app"
    versionCode = "10" 
    version     = "1.0.0" >

<name>MY_APP</name>

<description>
   File download test
</description>

<author href="http://enrico.io">
    Me
</author>

<preference name="AndroidPersistentFileLocation" value="Internal" />
<preference name="iosPersistentFileLocation" value="Library" />
<preference name="BackupWebStorage" value="none" />

<plugin spec="https://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer.git" />
<plugin spec="https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git" />
<plugin name="cordova-plugin-whitelist" spec="1.2.2" />

<access origin="*" subdomains="true" />

</widget>

INDEX.HTML

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="msapplication-tap-highlight" content="no" />
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: ms-appdata: http://www.enrico.io 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

        <title>Downloading file</title>

        <script src="phonegap.js"></script>

</head>
<body>
    MY_APP
    <div id="fs"></div>
    <div id="app_folder"></div>
    <div id="saving"></div>
    <div id="error_code"></div>
    <div id="error_source"></div>
    <div id="error_target"></div>


    <script type="text/javascript">

        document.addEventListener("deviceready", onDeviceReady, false);  

        function onDeviceReady() {  

            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);

                function onFileSystemSuccess(fileSystem) {
                    //document.getElementById("fs").innerHTML = fileSystem.name;

                    var fileTransfer = new FileTransfer();
                    var fileURL = cordova.file.dataDirectory + "test.txt";

                    var uri = encodeURI("http://www.enrico.io/phonegap/test.txt");

                    document.getElementById("app_folder").innerHTML = "App folder = " + fileURL;

                    fileTransfer.download(
                        uri,
                        fileURL,
                        function(entry) {
                            document.getElementById("saving").innerHTML = "Saving to... " + entry.toURL();
                        },
                        function(error) {
                            document.getElementById("error_code").innerHTML = "Error code = " + error.code;
                            document.getElementById("error_source").innerHTML = "Error source = " + error.source;
                            document.getElementById("error_target").innerHTML = "Error target = " + error.target;
                        },
                        false,
                        {
                            headers: {
                                "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
                            }
                        }
                    );

                }

                function fail(evt) {
                    document.getElementById("fs").innerHTML = evt.target.error.code;
                }

        }  

</script>

输出是:

MY_APP
App folder = file:///data/data/com.my_app/files/test.txt
Saving... = file:///data/data/com.my_app/files/test.txt

该文件似乎已正确下载但尚未正确下载。如果我从:

中删除文件名(test.txt)
var fileURL = cordova.file.dataDirectory + "test.txt";

OUTPUT IS:

MY_APP
App folder = file:///data/data/com.my_app/files/
Error code = 1
Error source = http://www.enrico.io/phonegap/test.txt
Error target = file:///data/data/com.my_app/files/

修改 正如@Gandhi所建议的那样(请参阅下面的评论)将cordova.file.dataDirectory更改为cordova.file.externalRootDirectory它可以正常工作,但文件会下载到file:///storage/sdcard0/而不会下载到应用的数据目录/文件夹。请记住这个缺点:如果卸载了应用程序,则不会删除应用程序的数据。

0 个答案:

没有答案