Контекст : я разрабатываю гибридное приложение с Cordova 6 и SAPUI5 Framework (сейчас нужно беспокоиться только об Android).
Что я хочу : Копировать/ быстро переместить файл в путь.Возможно получение FileEntry из объекта File / Blob из FileUploader на sapui5.
Ввод : FileUploader
Вывод : объект файла. Таким образом, я получаю файл, когда выбираю его, выполняя следующие действия:
sap.ui.getCore().byId('file-uploader-id').oFileUpload.files[0];
Итак, я должен скопировать его в другое место: " cordova.file .externalCacheDirectory».Но FileUploader не предоставляет значение полного пути для выбранного элемента ( по соображениям безопасности ).
Что я пробовал :
var sPath = URL.createObjectURL(oFile);
var pCopyFrom = new Promise((resolve, reject) => {
window.resolveLocalFileSystemURL(sPath, resolve, reject);
});
var pCopyTo = new Promise((resolve, reject) => {
var sExternalCachePath = cordova.file.externalCacheDirectory;
window.resolveLocalFileSystemURL(sMediaPath, resolve, reject);
});
Promise.all([pCopyFrom, pCopyTo]).then(aValues => {
aValues[0].moveTo(aValues[1], aValues[0].name, cbSuccess, cbError);
});
Результат :
Решение, похоже, не работает, поскольку сгенерированный путь недоступен (код ошибки 5), этот путь недопустим для его использования.
Возможные решения :
- Извлечь путь файлового объекта другим способом.
- Использовать другой вход, который может предоставить этот путь (до сих пор я не делалнайти любой).
- Найти путь к файлу, используя имя файла или, возможно, размер или что-то рекурсивное в телефоне.
Какое текущее решение (Но на самом делемедленно) :
Записать файл с помощью FileWritter .Если у меня есть путь и я использую приведенный выше код для видео (продолжительностью 5 секунд), он тратит менее 1 секунды (благодаря FileEntry ) для его копирования / перемещения (используя захват камеры или видео с cordova-plugin-media-capture , который дает путь к файлу), при использовании метода FileWritter он тратит как 10 секунд чтобы написать.
Спасибо, что прочитали.Я буду загружать любые новые, как у меня есть.