Подтвердить что ты не робот

Как получить доступ к изображению из собственного URI (активы-библиотеки) в Кордове для iOS

У меня есть приложение Cordova/PhoneGap, которое использует камеру для захвата изображения. Мне нужно получить доступ к этой картине для отправки на мой сервер.

Для Android я просто использую $cordovaFile.readAsDataURL(cordova.file.dataDirectory, fileName)

Тем не менее; на iOS имя файла не возвращается как таковое. Мое возвращаемое значение для iOS показывает путь как

?

активы библиотека://asset/asset.JPG ID = 539425FE-43AA-48E7-9865-D76348208AC7 & внутр = JPG

Как я могу получить доступ к этому изображению и прочитать его? Я бы предпочел придерживаться $cordovaFile, но просто хочу заставить его работать.

Я использую плагин CordovaCameraPreview, и лучшее, что я могу получить от обработчика изображения, похоже, что-то похожее на:

активы библиотека://asset/asset.JPG ID = 990355E1-200A-4E35-AAA1-7D461E3999C8 & внутр = JPG?? Фондовооруженности библиотека://asset/asset.JPG ID = C49FF0EB-CCCB-45B2-8577-B13868D8DB29 & внутр = JPG

Как я могу преобразовать это в имя файла и путь, который я могу читать с помощью $cordovaFile? Согласно их документации (http://ngcordova.com/docs/plugins/file/), похоже, что мне нужно использовать один из их путей для компоновки файловой системы. Он отлично работает на Android с помощью файла cordova.file.dataDirectory, но не может понять, как получить доступ к iOS

Я также пробовал использовать window.resolveLocalFileSystemURL(path), но я получаю undefined в качестве результата.

Обновление

Я чувствую, что приближаюсь... используя window.resolveLocalFileSystemURL(path,resolveOnSuccess, resOnError); Я получаю дополнительную информацию

name: "assets-library"
fullPath: "/asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
name: "asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
nativeURL: "assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"

Похоже, теперь мне нужно использовать fullPath, но до сих пор не могу понять, как получить доступ с помощью $cordovaFile

Если я пытаюсь использовать $cordovaFile.readAsDataURL(cordova.file.dataDirectory, data.name), где data.name является активным .JPG? id = 711B4C9D-97D6-455A-BC43-C73059A5C3E8 & ext = JPG Я получаю файл, не найденный ошибка

Обновление 2

Я попытался использовать каждый макет файловой системы, доступный в http://ngcordova.com/docs/plugins/file/, и получить одну и ту же ошибку File Not Found на каждом из них. Еще не известно, как получить доступ к файлу в библиотеке ресурсов с помощью $cordovaFile

4b9b3361

Ответ 1

Я некоторое время боролся с подобной проблемой, но сегодня понял. Я также думал, что API-интерфейсы FileSystem не работают с assets-libary:// URI, но это не так.

Вы должны иметь доступ к объекту File (а также фактическое имя изображения), используя следующий код:

resolveLocalFileSystemURL('assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG', function(fileEntry) {
    fileEntry.file(function(file) {
        var reader = new FileReader();
        reader.onloadend = function(event) {
            console.log(event.target.result.byteLength);
        };
        console.log('Reading file: ' + file.name);
        reader.readAsArrayBuffer(file);
    });
});

Ответ 2

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

fullPath = fullPath.replace("assets-library://", "cdvfile://localhost/assets-library/")

Он работает в iOS 9.3