Проблема с подключением камеры Phonegap (DestinationType.FILE_URI)

Я разрабатываю приложение на основе телефона, которое имеет функции передачи файлов. Я использую плагин камеры для выбора файла изображения. Код отлично работает с "DestinationType.DATA_URL". Но я не могу получить доступ к файлу с именем "DestinationType.FILE_URI".

DestinationType.DATA_URL просто предоставляет содержимое файла изображения. Но я должен получить имя файла изображения и путь к файлу вместе с его содержимым. Поэтому я должен использовать "DestinationType.FILE_URI" в параметрах камеры. Ниже мой код,

function attachFile() {
 var pictureSource=navigator.camera.PictureSourceType;
 var cameraOptions = { quality: 49 , destinationType:
 Camera.DestinationType.FILE_URI, sourceType: pictureSource.PHOTOLIBRARY }; 
 navigator.camera.getPicture(attachSuccess, attachFail, cameraOptions);
} 
function attachSuccess(fileuri) {
 filePath = JSON.stringify(fileuri);
 console.log("FilePath: "+filePath ); 
 window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
}
function attachFail() {
 console.log("attach failed");
}
function gotFS(fileSystem) { 
 console.log("gotFS:"); 
 var root = "/"+fileSystem.root.name; 
 console.log("root: "+root); 
 filePath = filePath .substring(filePath.indexOf(root)); 
 var imageName = filePath.substring(filePath.lastIndexOf('/'));
 var type = imageName.substring(filePath.indexOf('.'));
 fileSystem.root.getFile(filePath, null, gotFileEntry, fail); 
}
function fail() {
 console.log("** failed **"); 
}
function gotFileEntry(fileEntry) {
 console.log("got file entry");
 fileEntry.file(gotFile, fail);
}
function gotFile(file) {
 console.log("got file"); 
}

Когда я вызываю функцию 'attachFile', открывается окно Get Picture, и я могу выбрать файл изображения. Затем выполняется функция обратного вызова attachSuccess. Но я не могу получить доступ к файлу с URI файлом. URI FILE печатается, как показано ниже,

Содержание://СМИ/внешние/изображения/СМИ/5490

Интересно, как я могу получить "имя файла" или "файл-объект" из этого URI. Пожалуйста, предложите. (код протестирован в андроиде Kitkat и Lollipop)

3 ответа

Вы можете использовать API-интерфейс Cordova FileSystem. Вот краткий пример загрузки файла изображения:

window.resolveLocalFileSystemURL(filePath, // The file path
 function(fileEntry) { // found the file
 fileEntry.file(function(f) { // got the file
 var reader = new FileReader();
 reader.onloadend = function(evt) {
 var fileContent = reader.result;
 // Do something with the fileContent
 someImage.attr("src", fileContent); // Example
 }
 reader.readAsDataURL(f); // TODO find a way to read it straight to the right format (if there is any)
 }, function(e) { // cannot open file
 console.log("Error opening file: " + e.message);
 });
 },
 function(e) { // file not found
 console.log("Error finding file: " + e.message);
 });

fileContent Строка содержит строку 'data:' + base64. Вы также можете использовать переменную f, чтобы получить имя файла.

Литература:

https://developer.mozilla.org/en-US/docs/Web/API/FileReader.readAsDataURL

https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md


Ваш код довольно хорош.

Вы должны убедиться, что вы добавили данные плагина Файл в config.xml или нет. Это может быть причиной неправильного выбора сведений о файле.

и/или ниже одного, если вы хотите перенести файл в другое место.

Посмотрите этот и . Оба использовали destinationType.FILE_URI и не смогли обработать дальше, но как только правильно добавили данные плагина в config.xml, он работал хорошо.


URI, который вы получаете, является собственным URI. Попробуйте удалить поле destinationType из камерыОпции, потому что плагин по умолчанию имеет значение FILE_URI.

Если это не сработает, укажите destinationType значение 1.

Я предполагаю, что объект Camera.DestinationType каким-то образом запутан.

P.S. Если ваша конечная цель - загрузить фотографию, попробуйте использовать перенос файла cordova-plugin-file.

licensed under cc by-sa 3.0 with attribution.