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, который будет работать.