【问题标题】:File-transfer download file issue on Cordova 3.1Cordova 3.1 上的文件传输下载文件问题
【发布时间】:2013-11-14 13:04:12
【问题描述】:

我正在使用 cordova 3.1 创建我的第一个 Web 应用程序。

在这个应用程序中,我需要能够将文件下载到手机然后打开它,但我似乎无法通过如何下载文件。

我正在使用cordovas 文档页面中的文件传输代码。 Everyting 使用 CLI 安装。

这是我已经走了多远:

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">

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

function onDeviceReady() {
   download();
}    

function download(){
        var filePath = '/mnt/sdcard';
        var fileTransfer = new FileTransfer();
        var uri = encodeURI("https://www.dropbox.com/s/27bxw65u4ga5is0/test.pdf");

        fileTransfer.download(
            uri,
            filePath,
            function(entry) {
                console.log("download complete: " + entry.fullPath);
            },
            function(error) {
                console.log("download error source " + error.source);
                console.log("download error target " + error.target);
                console.log("upload error code" + error.code);
            },
            false,
            {
                headers: {
                    "Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
                }
            }
        );
}

config.xml

<access origin="*" />
<feature name="File">
<param name="android-package" value="org.apache.cordova.file.FileUtils" />
</feature>
<feature name="FileTransfer">
<param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
</feature>

还有我的清单

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

我遇到的错误

 E/FileTransfer(878):     {"target":"\/sdcard\/test.pdf","source":"https:\/\/www.dropbox.com\/s\/27bxw65u4ga5is0\/tes t.pdf","http_status":0,"code":1}
 E/FileTransfer(878): java.io.FileNotFoundException:/sdcard/test.pdf: open failed: EACCES (Permission denied)
 E/FileTransfer(878):   at libcore.io.IoBridge.open(IoBridge.java:416)         E/FileTransfer(878):     at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
 E/FileTransfer(878):   at    org.apache.cordova.CordovaResourceApi.openOutputStream(CordovaResourceApi.java:290)
 E/FileTransfer(878):   at org.apache.cordova.CordovaResourceApi.openOutputStream(CordovaResourceApi.java:271)
 E/FileTransfer(878):   at org.apache.cordova.filetransfer.FileTransfer$4.run(FileTransfer.java:711)

我已经花了将近 2 天的时间试图解决这个问题,但没有成功。

【问题讨论】:

    标签: android cordova file-transfer


    【解决方案1】:

    不确定 3.1,但对于最新版本的 Cordova (3.3+),较新的 (1.0.0+) 版本的 File 使用文件系统 URL 而不是文件路径。像这样的:

    cdvfile://localhost/persistent/path/to/file
    

    请参阅本文档底部的注释:https://github.com/apache/cordova-plugin-file-transfer/blob/31ac00d3ae35f9ca280cf4e6c9edc9df23ea95b5/doc/index.md

    【讨论】:

      【解决方案2】:

      科尔多瓦 3.3.0 科尔多瓦插件文件传输 r 0.4.2 科尔多瓦插件文件 r 1.0.1

      在真实设备上测试,适用于 Android 和 iOS

      我的代码:

      fileTransfer.download(
          "http://my.domain.com/data/sashaTest.txt",
          fileSystem.root.toURL() + "sashaTest.txt", // the key factor !!!
          function(theFile) {
          alert("download complete: " + theFile.toURL());
          console.log("download complete: " + theFile.toURL());
          },
          function(error) {
          console.log("download error source " + error.source);
          console.log("download error target " + error.target);
          console.log("upload error code: " + error.code);
          },
          true
      );
      

      目标设置为:fileSystem.root.toURL() + "sashaTest.txt",

      有所作为。

      【讨论】:

        【解决方案3】:

        是的,fileSystem.root。toURL() 是新的播放器,可让您使用 Cordova 最新的 cdvfile:// url 系统。

        很遗憾,他们没有立即就此事发布一般通知。它出现在 a resolved issue's comments 中,后来被记录在他们的 GIT 存储库 as dsims mentioned earlier 的文档中。

        一旦 toURL() 事情被清除,Phonegap/Cordova 文档状态的下载示例就有意义并且会成功。

        【讨论】:

          【解决方案4】:

          同时添加 Internet 权限

          <uses-permission android:name="android.permission.INTERNET" />
          

          【讨论】:

          • 感谢您的回答,但互联网权限 sn-p 已经在清单中,只是忘了提及。
          【解决方案5】:

          注意:这最初是由 OP 编辑​​到问题中的。我已将其移至答案,以符合网站指南。


          删除了 Cordova 3.1 并手动安装了 2.7.0 并让它工作。

          【讨论】:

            猜你喜欢
            • 2023-04-02
            • 1970-01-01
            • 1970-01-01
            • 2014-01-05
            • 1970-01-01
            • 2011-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多