PhoneGap 3.0 FileTransfer скачать не работает

Я загружаю многослойное MIME -кодированное изображение в iOS примерно так:

var ft = new FileTransfer();
url = encodeURI(url);

ft.download(url, path, function(fileEntry) {}, function(err) {});

с

path = "file://localhost/var/mobile/Applications/D702F059-A29F-4FF4-A165-D4A903DEDE7D/Documents/captured/2419747919.jpeg"

и получите следующую ошибку:

body: "Could not create path to save downloaded file: The operation couldn’t be completed. (Cocoa error 513.)"
code: 1 (file not found)
http status: 200

Это указывает на неверный путь, но я не вижу ничего плохого в этом. Я получаю путь, как это:

path = fs.root.toURL();

Все остальное работает отлично, и файлы могут быть сохранены по тому же пути, принимая фотографии. Только не через загрузку FileTransfer.

Есть идеи или ошибка в PhoneGap 3.0? Спасибо!

ОБНОВЛЕНИЕ - Обходной путь

FileWriter работает и теперь даже сохраняет капли на iOS и Android. Пример кода:

var xhr = new XMLHttpRequest();

xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';

xhr.onload = function() {
    var blob = new Blob([xhr.response], {type: 'image/jpeg'});

    // save via FileWriter
};

xhr.send();

4 ответа

Решение

Я нашел проблему в iOS:

Путь: путь = "файл://localhost/var/mobile/Applications/D702F059-A29F-4FF4-A165-D4A903DEDE7D/Documents/captured/2419747919.jpeg"

не работает, потому что это URL с "localhost" в нем.

Из FileEntry в Cordova можно получить строку, используя "fullPath" и "toURL" ... на Android они работают как для записи файла. На iOS работает только fullPath... URL не может успешно записать файл!

У меня были проблемы с этим во время работы на iOS Simulator, но как только я протестировал его на реальном устройстве, это сработало.

Вы хотите использовать FileEntry.toURL() чтобы получить путь, который выглядит так:

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

Смотрите документацию здесь: https://github.com/apache/cordova-plugin-file-transfer

Используйте nativeURL, чтобы получить префикс, добавить к нему имя вашего файла и передать его объекту FileTransfer, который будет работать.

Другие вопросы по тегам