3

コルドバ 3.1 を使用して最初の web アプリケーションを作成しています。

このアプリでは、ファイルを電話にダウンロードして開くことができる必要がありますが、ファイルをダウンロードする方法をパスできないようです。

cordovas doc ページのファイル転送コードを使用しています。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日を費やしましたが、成功しませんでした。

4

5 に答える 5

7

3.1 についてはわかりませんが、Cordova の最新バージョン (3.3+) の場合、File の新しい (1.0.0+) バージョンでは、ファイル パスの代わりにファイル システムの URL が使用されます。このようなもの:

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

このドキュメントの下部にあるメモを参照してください: https://github.com/apache/cordova-plugin-file-transfer/blob/31ac00d3ae35f9ca280cf4e6c9edc9df23ea95b5/doc/index.md

于 2014-02-18T21:58:29.067 に答える
4

コルドバ 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",

違いを作りました。

于 2014-03-16T12:56:16.367 に答える
0

インターネット許可も追加します

<uses-permission android:name="android.permission.INTERNET" />
于 2013-11-14T13:07:10.647 に答える