Плагин Cordova File Transfer для загрузки файла на iOS - PullRequest
0 голосов
/ 29 декабря 2018

Я использую приведенный ниже код для загрузки и сохранения файла в памяти телефона.

    var downloadUrl = encodeURI(cordova.file.dataDirectory + fileName);
    var fileTransfer = new FileTransfer();

    fileTransfer.download(
    "http://developer.android.com/assets/images/home/ics-android.png",
    downloadUrl,
    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);
    });

Этот код работает нормально на любом устройстве Android, но не работает в iPhone, выдавая следующую ошибку.

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

Я новичок в iOS и может кто-нибудь помочь мне решить эту проблему?И дайте мне знать любые разрешения, которые должны быть предоставлены перед выполнением этого кода ...

Ответы [ 2 ]

0 голосов
/ 25 июля 2019

Чтобы заставить его работать в iOS, мне пришлось поместить create () в проверку готовности платформы.

constructor(platform: Platform, filetransfer: FileTransfer) {
    platform.ready().then(() => {
       this.Transfer = filetransfer.create();
    }
}

download(fileName){

    let lLocation = this.file.cacheDirectory + fileName;

    this.Transfer.download(
    "http://developer.android.com/assets/images/home/ics-android.png",
    lLocation).then().catch
}
0 голосов
/ 30 декабря 2018

Плагин передачи файлов устарел некоторое время (более года), и вам, вероятно, не стоит тратить слишком много времени на то, чтобы плагин передачи файлов заработал.Я бы порекомендовал следовать инструкциям в сообщении в блоге о том, как передать файл api .

Итак, для вашего кода (не проверено, но должно работать):

window.requestFileSystem(cordova.file.dataDirectory, 0, function (fs) {
    console.log('file system open: ' + fs.name);
    fs.root.getFile(fileName, { create: true, exclusive: false }, function (fileEntry) {
        console.log('fileEntry is file? ' + fileEntry.isFile.toString());
        var oReq = new XMLHttpRequest();
        // Make sure you add the domain name to the Content-Security-Policy <meta> element.
        oReq.open("GET", "http://developer.android.com/assets/images/home/ics-android.png", true);
        // Define how you want the XHR data to come back
        oReq.responseType = "blob";
        oReq.onload = function (oEvent) {
            var blob = oReq.response; // Note: not oReq.responseText
            if (blob) {
                fileEntry.createWriter(function (fileWriter) {

                    fileWriter.onwriteend = function() {
                        console.log("Successful file write...");                        
                    };

                    fileWriter.onerror = function (e) {
                        console.log("Failed file write: " + e.toString());
                    };

                    fileWriter.write(blob);
                });
            } else {
                console.error('we didnt get an XHR response!');
            }
        };
        oReq.send(null);
    }, function (err) { 
        console.error('error getting file! ' + err); 
    });
}, function (err) { 
    console.error('error getting persistent fs! ' + err); 
});
...