2016-01-21 2 views
1

файла После выбора видеофайла из моего устройства файловой системы с помощью Cordova-плагин-камеры сек метода navigator.camera.getPicture(), функция возвращает URI, как 'content://media/external/video/media/7319' (Android).Cordova-плагин-путь_к_файл: не удалось разрешить URI, как путь

Это должно быть преобразован в путь к файлу для загрузки файлов через Cordova-плагин-файл-переводы функции «upload()» (который принимает только родные путь или данные: URI). data: URI не является вариантом, поскольку мы должны передавать довольно большие файлы (5MB +), которые конвертируются в base64 слишком долго.

По словам разработчика, существует очень недавний issue, который предотвращает операцию разрешения.

Есть ли какие-либо другие методы, которые будут работать как на Android, так и на ios? Или мне нужно отказаться от переноса кордоны-плагина-файла для другого метода загрузки?

+0

Вы проверили https://github.com/apache/cordova-plugin-camera? Этот плагин имеет возможность вернуть путь к файлу, который можно использовать для простой передачи файла на сервер. и кстати, вы используете ионный каркас? если вы попробуете использовать этот плагин http://ngcordova.com/docs/plugins/capture/, его также задокументировали! – 404

+0

@ 404 спасибо за ваш комментарий, но cordova-plugin-camera - это плагин, который я использую прямо сейчас (должен был упомянуть об этом). Да, я использую ионный, но ngCordova /../ capture не предоставляет способ загрузки файлов из хранилища устройств. Согласно документам, он может записывать только новые файлы с камеры. – Ammul

ответ

0

Немного поздно, но вы можете использовать cordova-plugin-file вместо Cordova-плагин-путь_к_файлу как предложено в Cordova documentation:

navigator.camera.getPicture(function cameraSuccess(imgUri) { 
    uploadPicture(imgUri); 
}, function cameraError(error) { 
    console.debug("Unable to obtain picture: " + error, "app"); 
}); 

function uploadPicture(imgUri) { 
    var uploadUrl = ...; 
    var success = ...; 
    var fail = ...; 
    var options = ...; 

    var fileEntry = getFileEntry(imgUri); 
    var fileTransfer = new FileTransfer(); 
    fileTransfer.upload(fileEntry.toURL(), encodeURI(uploadUrl), success, fail, options); 
} 

function getFileEntry(imgUri) { 
    window.resolveLocalFileSystemURL(imgUri, function success(fileEntry) { 
     return fileEntry; 
    }, function() { 
     // If don't get the FileEntry (which may happen when testing 
     // on some emulators), copy to a new FileEntry. 
     return createNewFileEntry(imgUri); 
    }); 
} 

function createNewFileEntry(imgUri) { 
    window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, function success(dirEntry) { 
     // JPEG file 
     dirEntry.getFile("tempFile.jpeg", { create: true, exclusive: false }, function (fileEntry) { 
     return fileEntry; 
    }, onErrorCreateFile); 
}, onErrorResolveUrl); 

}

Примечание: Не тестировался ...

Смежные вопросы