5

私は自分のサイトから画像をダウンロードして電話に保存する必要があるアプリを作成していますが、phonegapを試してみると、発生する可能性のあるすべてのエラーが表示されます。これを修正するにはどうすればよいですか=/?

var fileTransfer = new FileTransfer();
fileTransfer.download(
    "http://developer.android.com/assets/images/home/ics-android.png",
    "/",
    function(entry) {
        alert("download complete: " + entry.fullPath);
    },
    function(error) {
        alert("download error source " + error.source);
        alert("download error target " + error.target);
        alert("upload error code" + error.code);
    });

表示されるエラーは次のとおりです。

Download error source " the url used"
download error target: " the target used  "
upload error code 1

私はcordova2.2.0を使用しています

logcatエラーログは次のとおりです。

 12-06 09:07:26.413: E/FileTransfer(2186): {"target":"\/","source":"http:\/\/developer.android.com\/assets\/images\/home\/ics-android.png","code":1}
12-06 09:07:26.413: E/FileTransfer(2186): java.io.FileNotFoundException
12-06 09:07:26.413: E/FileTransfer(2186):   at org.apache.cordova.FileTransfer.getFileFromPath(FileTransfer.java:794)
12-06 09:07:26.413: E/FileTransfer(2186):   at org.apache.cordova.FileTransfer.access$700(FileTransfer.java:62)
12-06 09:07:26.413: E/FileTransfer(2186):   at org.apache.cordova.FileTransfer$4.run(FileTransfer.java:631)
12-06 09:07:26.413: E/FileTransfer(2186):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-06 09:07:26.413: E/FileTransfer(2186):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-06 09:07:26.413: E/FileTransfer(2186):   at java.lang.Thread.run(Thread.java:856)
4

2 に答える 2

9

あなたはとても近いです。間違っているのはターゲットファイルだけです。試す:

var fileTransfer = new FileTransfer();
fileTransfer.download(
    "http://developer.android.com/assets/images/home/ics-android.png",
    "file://sdcard/ics-android.png",
    function(entry) {
        alert("download complete: " + entry.fullPath);
    },
    function(error) {
        alert("download error source " + error.source);
        alert("download error target " + error.target);
        alert("upload error code" + error.code);
    });

「file://」プレフィックスが必要で、権限がないため「/」に保存できません。

于 2012-12-06T19:14:11.353 に答える
2

私はそれを試してみましたが、これは Android で動作しますが、ios ではまだチェックしていません。プロジェクトで使用しているため、ダウンロードは成功しています。

enter code here
 function fun(){
var dfd = $.Deferred(function (dfd){
var remoteFile = "Your link";
var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(localFileName, {create: true, exclusive: false},
    function(fileEntry) {
var localPath = fileEntry.fullPath;
if (device.platform === "Android" && localPath.indexOf("file://") === 0) {
            localPath = localPath.substring(7);
            }// You need to write IOS instead of Android

    var ft = new FileTransfer();
    ft.download(remoteFile, localPath, function(entry) {
    dfd.resolve('file downloaded');
     // Do what you want with successful file downloaded and then
    // call the method again to get the next file
    //downloadFile();
            }, fail);
             }, fail);
            }, fail);

           });
            return dfd.promise();

        }
                fun().then(function(msg){
            if(msg==="file downloaded")
            {
            alert("Download complete");
            }
            else
            {
            alert("Download error")
            }
            });
            function fail(){
            alert("error");
        }
于 2014-03-10T07:15:00.720 に答える