2011-10-31 14 views
5

Sto lavorando a un'applicazione PhoneGap che acquisisce le immagini utilizzando la fotocamera e, successivamente, le carica. Ci sono due modalità di funzionamento per la videocamera in PhoneGap: dati codificati base64 grezzi o un URI di file.Lettura dei file di acquisizione delle immagini in PhoneGap

La documentazione stessi dicono:

Nota: La qualità delle immagini delle immagini scattate con la fotocamera su dispositivi più recenti è abbastanza buona. La codifica di tali immagini utilizzando Base64 ha causato problemi di memoria su alcuni di questi dispositivi (iPhone 4, BlackBerry Torch 9800). Pertanto, l'utilizzo di FILE_URI come "Camera.destinationType" è altamente raccomandato.

Quindi mi piace usare l'opzione FILE_URI. Funziona benissimo e puoi anche mostrare le immagini nei tag IMG. L'URL è simile al seguente:

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

Tuttavia, ad un certo punto più tardi voglio leggere il contenuto del file da caricare su un server. Stavo per farlo usando il tipo FileReader. Questo non funziona e penso che sia perché non riesco ad accedere al file all'URL sopra.

Il codice di errore torno da readDataUrl è 1>FileError.NOT_FOUND_ERR = 1;

Tutte le idee come posso ottenere il file? Ho provato ad accedere all'ultima parte del percorso (photo_047.jpg) sulla base di un altro campione che ho visto, ma senza fortuna.

risposta

1

Ho appena iniziato con PhoneGap e, data l'età di questa domanda, potresti aver già trovato una risposta, ma ci provo comunque.

In primo luogo, si sarebbe in grado di utilizzare l'oggetto FileTransfer? Prende un file : URI come argomento.

Se FileTransfer non funziona per voi, e avete bisogno di leggere i dati del file da soli, è necessario il file PhoneGap oggetti, come FileReader, come hai detto. Ma la maggior parte di quelli si aspetta un percorso semplice - non un URI - per specificare il file con cui lavorare. Il motivo per cui stai ricevendo NOT_FOUND_ERR è perché sta tentando di aprire un file denominato file:/localhost/var ....

Ecco un rapido one-liner per estrarre la parte percorso dal URI:

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

Spero che questo aiuti!

1

La risposta di jgarbers mi è stata di aiuto ma non ha risolto il problema. Mi sono reso conto che la fotocamera memorizza le foto nella cartella Temp anziché nella cartella Documenti. Impostando temporaneamente il mio file system locale, è stato permesso di trovare la posizione corretta per le immagini della videocamera.

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

...

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

...

var path =/file:.?.. // (/)/exec (fileURI) [1];

Rif jgarbers sopra e risposte Rik (soluzione è stata testata con successo su iOS 7)

0

è possibile all'utente il plugin trasferimento file per caricare qualsiasi file sul server

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 }); 
} 
Problemi correlati