2015-07-21 5 views
13

Ho un'app Cordova/PhoneGap che utilizza la fotocamera per acquisire un'immagine. Ho bisogno di accedere a questa immagine per inviare al mio server.Come accedere all'immagine dall'URI nativo (risorsa-libreria) in Cordova per iOS

Per Android semplicemente uso $cordovaFile.readAsDataURL(cordova.file.dataDirectory, fileName)

Tuttavia; su iOS il nome del file non ritorna come tale. Il mio valore di ritorno per iOS mostra il percorso come

asset-biblioteca:? //asset/asset.JPG id = 539425FE-43AA-48E7-9865-D76348208AC7 & ext = JPG

Come può Accedo e leggo questa immagine? Preferirei restare con $ cordovaFile ma voglio solo farlo funzionare.

Sto usando plug CordovaCameraPreview e il meglio che posso tornare dal gestore di foto beneficiario sembra essere qualcosa di formato simile a:

asset-biblioteca:? //asset/asset.JPG id = 990355E1 -200A-4E35-AAA1-7D461E3999C8 & ext = JPG asset-biblioteca:? //asset/asset.JPG id = C49FF0EB-CCCB-45B2-8577-B13868D8DB29 & ext = JPG

Come posso convertire questo a un nome di file e un percorso che posso leggere con $ cordovaFile? Secondo la loro documentazione (http://ngcordova.com/docs/plugins/file/) sembra che ho bisogno di utilizzare uno dei loro percorsi per File System Layout. Funziona bene su Android utilizzando cordova.file.dataDirectory ma non riesco a capire come accedere su iOS

Ho anche provato a usare window.resolveLocalFileSystemURL(path) ma sto diventando indefinito come risultato.

Aggiornamento

Mi sento come se sto avvicinando ... usando window.resolveLocalFileSystemURL(path,resolveOnSuccess, resOnError); ottengo ulteriori informazioni

name: "assets-library" 
fullPath: "/asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG" 
name: "asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG" 
nativeURL: "assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG" 

Sembra che io ora bisogno di usare il fullPath, ma ancora non posso capire come accedere con $ cordovaFile

Se provo ad usare $cordovaFile.readAsDataURL(cordova.file.dataDirectory, data.name) dove data.name è asset.JPG? id = 711B4C9D-97D6-455A-BC43-C73059A5C3E8 & ext = JPG ottengo un file non trovato errore

Update 2

Ho provato con ogni singolo file di layout di sistema disponibile presso http://ngcordova.com/docs/plugins/file/ e ricevere lo stesso file non trovato errore su ciascuno di essi. Ancora nessun indizio su come accedere a un file in risorse-libreria usando $ cordovaFile

risposta

7

Ho avuto un problema simile per un po ', ma l'ho capito oggi. Ho anche pensato che le API FileSystem non funzionassero con gli URI assets-libary://, ma non è così.

Si dovrebbe essere in grado di ottenere l'accesso all'oggetto File (così come il nome dell'immagine reale) utilizzando il seguente codice:

resolveLocalFileSystemURL('assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG', function(fileEntry) { 
    fileEntry.file(function(file) { 
     var reader = new FileReader(); 
     reader.onloadend = function(event) { 
      console.log(event.target.result.byteLength); 
     }; 
     console.log('Reading file: ' + file.name); 
     reader.readAsArrayBuffer(file); 
    }); 
}); 
+0

Caro Danjarvis, ero anche affrontando lo stesso problema con il plugin camerapreview. Puoi dirmi se sei in grado di caricare il file utilizzando il file di output dal metodo sopra o no? L'url di output è simile a questo, cdvfile: //localhost/assets-library/asset/asset.JPG? Id = F0D3E4F4-366C-4C27-A158-937CA7805C87 & ext = JPG –

+0

Se stai solo provando a convertire la libreria di risorse: // URL per un percorso CDVFile, è possibile richiamare quanto segue sull'oggetto fileEntry restituito da resolveLocalFileSystemURL: 'fileEntry.toInternalURL()' – jcaruso

9

ho avuto successo con una semplice sostituzione, come questo

fullPath = fullPath.replace("assets-library://", "cdvfile://localhost/assets-library/") 

funziona in iOS 9.3

+0

Life saver! Questo è diventato rilevante per me quando volevo utilizzare l'indirizzo per un tag ''. Funzionava perfettamente con Cordova-iOS <4 ma da quando Cordova 6/Cordova-iOS 4 ha smesso di funzionare. Con il tuo codice, tutto torna alla normalità. :) – horstwilhelm

+0

Ha funzionato anche per noi su iOS 10.2 utilizzando cordova-ios 4.3.1 – rbarriuso

+0

Vorrei sottolineare che è necessario aggiungere '$ compileProvider.imgSrcSanitizationWhitelist (/^\ s * (https? | File | blob | cdvfile | content): | data: image /); 'nella fase di configurazione dell'app per visualizzare le immagini direttamente sulla vista – rbarriuso