web-dev-qa-db-ja.com

Cordova-ダウンロードフォルダーにファイルをダウンロード

私はたくさんの投稿を読みましたが、最終的な答えは得られませんでした。この link のコードから始めて、ファイルをアプリにダウンロードしました。とにかく、それを「ダウンロード」フォルダに入れたいです。私はAndroidを使用していますが、iOSにも有効なソリューションが欲しいのは明らかです。

6
Zappescu

[〜#〜]編集[〜#〜]

ファイルのパスがわかっている場合は、移動するだけです。

var storageLocation = "";
console.log(device.platform);
switch (device.platform) {

    case "Android":
        storageLocation = 'file:///storage/emulated/0/';
        break;
    case "iOS":
        storageLocation = cordova.file.documentsDirectory;
        break;

}


var fileUri = "file:///data/user/0/com.arsdigitalia.myapp/files/files/MyApp‌​/test.pdf"

function moveFile(fileUri) {
    window.resolveLocalFileSystemURL(
          fileUri,
          function(fileEntry){

                var parentEntry = storageLocation + "Download";
               
                // move the file to a new directory and rename it
               fileEntry.moveTo(parentEntry, "newFile.pdf", success, fail);
                       
          },
          errorCallback);
}

オリジナル

これを実現するために使用するコードのサンプルを以下に示します。これはAndroidで最適に機能します。iOSはアプリのサンドボックス化により少し異なるため、ファイルの取得は自分で処理する必要があります。また、Cordovaデバイスプラグインを使用して、アプリが実行されているデバイスを特定します。次に、それに合わせてストレージパスを変更できます。

var storageLocation = "";
console.log(device.platform);
switch (device.platform) {

    case "Android":
        storageLocation = 'file:///storage/emulated/0/';
        break;
    case "iOS":
        storageLocation = cordova.file.documentsDirectory;
        break;

}

window.resolveLocalFileSystemURL(storageLocation,
    function (fileSystem) {

        fileSystem.getDirectory('Download', {
                create: true,
                exclusive: false
            },
            function (directory) {

                //You need to put the name you would like to use for the file here.
                directory.getFile("YOUR_FILE_NAME", {
                        create: true,
                        exclusive: false
                    },
                    function (fileEntry) {


                        fileEntry.createWriter(function (writer) {
                            writer.onwriteend = function () {
                                console.log("File written to downloads")
                            };

                            writer.seek(0);
                            writer.write(YOUR_FILE_HERE); //You need to put the file, blob or base64 representation here.

                        }, errorCallback);
                    }, errorCallback);
            }, errorCallback);
    }, errorCallback);

var errorCallback = function(e) {
    
    console.log("Error: " + e)
    
}

次に、使用できるディレクトリからファイルリストを取得します。

window.resolveLocalFileSystemURL(storageLocation,
    function (fileSystem) {
    
        fileSystem.getDirectory('Download', {
                create: true,
                exclusive: false
            },
            function (directory) {

                var reader = directory.createReader();
                reader.readEntries(function (files) {

                    if (files.length == 0) {

                        console.log("No files found in downloads folder.")

                    } else {

                        $.each(files, function (i, v) {

                            console.log("File Name: " + files[i].name;)

                        });

                    }

                }, getFilesFail);
            }, getFilesFail);
    }, getFilesFail);

var getFilesFail = function(e) {
    
    console.log("Error: " + e);
    
}

デバイスプラグインをインストールするには、次のコマンドを使用します。

cordova plugin add cordova-plugin-device

ここにドキュメント:

https://cordova.Apache.org/docs/en/latest/reference/cordova-plugin-device/

9
L Balsdon