8

Sto tentando di caricare una foto dal dispositivo mobile allo storage BLOB BLU utilizzando Cordova API. Non riesco proprio a farlo funzionare. Qualsiasi idea aiuterà molto.come caricare una foto sullo storage BLOB BLU usando Cordova API?

I dati caricati su BLOB hanno questo aspetto.

inizio ---->

- +++++ org.apache.cordova.formBoundary

Content-Disposition: form-data; name = "file"; filename = "test"

Content-Type: image/jpeg

Content-Length: 46785

....

< --- fine


Il mio codice:

/*Cordova Camera API calls*/ 
$scope.takePic = function (type) { 

    if (navigator.camera != undefined) { 
     if (type == 'PHOTOLIBRARY') 
      type = Camera.PictureSourceType.PHOTOLIBRARY; 
     else if (type == 'CAMERA') 
      type = Camera.PictureSourceType.CAMERA; 

     var options = { 
      quality: 45, 
      destinationType: Camera.DestinationType.DATA_URL, 
      sourceType: type, 
      allowEdit: true, 
      encodingType: Camera.EncodingType.JPEG, 
      saveToPhotoAlbum: false 
     } 
     navigator.camera.getPicture(onSuccess, onFail, options); 
    } 
} 

$scope.message = "Add an image"; 
var onSuccess = function (DATA_URL) { 
    $scope.message = "Choose another image"; 
    $scope.postForm.onFileSelect = DATA_URL; 
    $scope.$apply(); 
}; 
var onFail = function (e) { 
    $scope.picData = null; 
    $scope.message = "On fail " + e; 
}; 

//$scope.blobSasUrl is url to upload to azure blob storage 
var xhr = new XMLHttpRequest(); 
xhr.onerror = fail; 
xhr.onloadend = uploadCompleted; 
xhr.open("PUT", $scope.blobSasUrl); 
xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob'); 
xhr.setRequestHeader('x-ms-blob-content-type', 'image/jpeg'); 
xhr.send($scope.postForm.onFileSelect); 

Modifica ---- // Sto utilizzando Camera.DestinationType.DATA_URI. Ho anche provato FILE_URI.

//This is not working (error) 
var reader = new FileReader(); 
reader.onloadend = function(evt) { 
    console.log(evt.target.result); //nothing happens here 
} 
reader.readAsDataURL(file); //file is either DATA_URI or FILE_URI 
+0

Ho anche provato l'oggetto FileReader ma reader.onloadend non viene mai attivato. Non sei sicuro del perché ... – wil

+0

Non hai menzionato quale errore ottieni – Thraka

+1

Onestamente non ho idea del tuo codice ma questo post potrebbe aiutarti. la mia domanda è stata fatta con l'aiuto di questo post. seguilo [http://blogs.msdn.com/b/writingdata_services/archive/2014/12/15/epic-saga-final-chapter-success-or-how-to-upload-images-to-azure-from -a-Cordova-app.aspx] (http://blogs.msdn.com/b/writingdata_services/archive/2014/12/15/epic-saga-final-chapter-success-or-how-to-upload- image-to-azure-from-a-cordova-app.aspx) –

risposta

0

Ho ottenuto questo lavoro convertendolo in stringa base64. Puoi farlo con javascript.

2

creare un servizio di archiviazione blob sul tuo conto azzurro, importare la libreria di archiviazione blob nel tuo sito web. Invia l'immagine al tuo sito Web ospitata su Azure, quindi esegui un'operazione per inviarla alla memoria BLOB. Il fatto che tu stia usando Cordova come cliente è irrilevante. Il server non deve sapere chi sia il client della piattaforma, solo come gestire la richiesta.

+0

grazie per la tua risposta. Solo FYI. per poter pubblicare su azure blob, è necessario ottenere un uri generato in modo univoco per poterli pubblicare.così ottengo un URL di post unico dal servizio azzurro come un risultato di richiamata e sono in grado di fare un PUT ma l'immagine viene caricata come un formato codificato a 64 bit non in un array di byte utilizzato dallo storage BLOB di Azure. Il problema è che FileReader, reader.onloaded non viene mai attivato. Non genera errore o nulla – wil

+0

Voglio solo aggiungere che sono in grado di caricare array di byte usando un sito web senza problemi, ma non phonegap - ionico – wil

Problemi correlati