Загрузка 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();

person Benjamin E.    schedule 17.09.2013    source источник
comment
Не могли бы вы предоставить код, как вы решили эту проблему? Это баг в Кордове? У нас такая же проблема.   -  person christianmenkens    schedule 20.11.2013
comment
Не знаю, работает ли сейчас FileTransfer, давно не пробовал. См. пример кода выше. Вам нужно знать mimeType, чтобы создать правильный BLOB-объект, но я думаю, это может быть просто текст. Если вам нужна ссылка на FileSystemAPI, найдите Filer.js Эрика Бидельмана.   -  person Benjamin E.    schedule 20.11.2013


Ответы (4)


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

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

не работает, потому что это URL-адрес с «localhost».

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

person christianmenkens    schedule 27.11.2013
comment
Привет, @christianmenkens, я знаю, что вы сделали при успешном обратном вызове, чтобы отобразить его на изображении src? я добился успеха, но он возвращает var/mobile ... - person BizApps; 12.03.2014
comment
путь с файлом://var/mobile/Applications/D702F059-A29F-4FF4-A165-D4A903DEDE7D/Documents/captured/2419747919.jpeg должен работать на iOS. Мы просто используем этот путь, чтобы поместить его в FileUpload. - person christianmenkens; 21.03.2014
comment
@christianmenkens, вы уверены, что после файла есть только две косые черты: ? получаю три при запросе ФС... (и ошибка какао 512.. хорошо работает на Андроиде) - person trainoasis; 08.07.2014
comment
Я использую dirEntry.nativeURL+имя файла в качестве цели для FileTransfer.download на iOS и Android, и это работает как шарм! - person 695Multimedia; 14.11.2014

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

person brickpop    schedule 15.07.2014

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

person Seraj Ahmad    schedule 15.05.2015

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

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

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

person wmarbut    schedule 10.07.2015