2011-10-31 16 views
5

Estoy trabajando en una aplicación PhoneGap que captura imágenes usando la cámara y, luego, las carga. Hay dos modos de operación para la cámara en PhoneGap: datos codificados raw base64 o un URI de archivo.Lectura de archivos de captura de imágenes en PhoneGap

Los documentos dicen a sí mismos:

Nota: La calidad de imagen de las imágenes tomadas con la cámara en los dispositivos más nuevos es bastante bueno. La codificación de tales imágenes con Base64 ha causado problemas de memoria en algunos de estos dispositivos (iPhone 4, BlackBerry Torch 9800). Por lo tanto, usar FILE_URI como 'Camera.destinationType' es altamente recomendado.

Así que estoy dispuesto a usar la opción FILE_URI. Esto funciona muy bien e incluso puede mostrar las imágenes en etiquetas IMG. La URL tiene el siguiente aspecto:

archivo: //localhost/var/mobile/Applications/4FE4642B-944C-449BB-9BD6-1E442E47C7CE/tmp/photo_047.jpg

Sin embargo, en algún momento luego quiero leer el contenido del archivo para subirlo a un servidor. Iba a hacer esto usando el tipo FileReader. Esto no funciona y creo que es porque no puedo acceder al archivo en la URL anterior.

El código de error vuelva de readDataUrl es 1>FileError.NOT_FOUND_ERR = 1;

Alguna idea de cómo puedo conseguir el archivo? Intenté simplemente acceder a la última parte de la ruta (photo_047.jpg) en base a otra muestra que vi pero no tuve suerte.

Respuesta

1

Estoy empezando con PhoneGap, y teniendo en cuenta la edad de esta pregunta es posible que ya hayas encontrado una respuesta, pero voy a intentarlo de todos modos.

En primer lugar, ¿podría utilizar el objeto incorporado FileTransfer? Se necesita un archivo : URI como argumento.

Si FileTransfer no funcionará para usted, y lo que necesita para leer los datos del archivo usted mismo, usted necesitará el archivo PhoneGap objetos, como FileReader, como usted ha dicho. Pero la mayoría espera un nombre de ruta simple, no un URI, para especificar el archivo con el que trabajar. La razón por la que obtiene NOT_FOUND_ERR es porque está intentando abrir un archivo llamado file:/localhost/var ....

Aquí hay una rápida de una sola línea para extraer la parte de la ruta de su URI:

var path = /file:\/\/.*?(\/.*)/.exec(fileuri)[1];

Espero que esto ayude!

1

La respuesta de jgarbers fue de ayuda para mí, pero no resolvió el problema. Me di cuenta de que la cámara almacena fotos en la carpeta Temp en lugar de en la carpeta Documento. Configurar mi sistema de archivos local temporalmente permitió que encuentre la ubicación correcta para las imágenes de la cámara.

window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, ... 
0

...

window.requestFileSystem (LocalFileSystem.TEMPORARY, 0, ...

...

ruta var =/archivo:.?.. // (/)/exec (fileURI) [1];

Ref jgarbers anteriores y Rik respuestas (solución ha sido probado con éxito en iOS 7)

0

que pueda usuario el plugin de transferencia de archivos para subir cualquier archivo al servidor

01..
//// pass your file uri to the mediafie param 
function uploadFile(mediaFile) { 
    var ft = new FileTransfer(); 
    path = mediaFile.fullPath; 
    name = mediaFile.name; 
////your service method url 
    var objUrl = http://example.com; 


    ft.upload(path, 
     objUrl, 
     function (result) { 
      alert("Success"); 


     }, 
     function (error) { 
      alert('Error uploading file ' + path + ': ' + error.code); 
     }, 
     { fileName: name }); 
}