8

Ich versuche, ein Foto von Mobilgerät auf Azure Blob Speicher mit Cordova API zu laden. Ich kann es einfach nicht zur Arbeit bringen. Jede Idee wird sehr helfen.Wie lade ich mit cordova api ein Foto in den azure Blobspeicher hoch?

Daten auf Blob hochgeladen sieht so aus.

Start ---->

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

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

Content-Type: image/jpeg

Content-Length: 46785

....

< --- Ende


Mein Code:

/*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); 

Bearbeiten ----- // Ich verwende Camera.DestinationType.DATA_URI. Ich habe auch FILE_URI versucht.

+0

Ich habe auch versucht, FileReader-Objekt, aber reader.onloadend wird nie ausgelöst. Nicht sicher, warum ... – wil

+0

Sie erwähnen nicht, welchen Fehler Sie erhalten – Thraka

+1

Ehrlich gesagt bekomme ich keine Ahnung von Ihrem Code, aber dieser Beitrag könnte Ihnen helfen. Meine Bewerbung wurde mit Hilfe dieses Posts gemacht. folge ihm [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- images-to-azure-from-a-cordova-app.aspx) –

Antwort

0

Ich habe dies zu arbeiten, indem Sie es in Base64 String konvertieren. Sie können dies mit Javascript tun.

2

Erstellen Sie einen BLOB-Speicherdienst auf Ihrem azure-Konto, importieren Sie die BLOB-Speicherbibliothek in Ihre Website. Lassen Sie das Bild an Ihre Website senden, die auf Azure gehostet wird, und übertragen Sie dann eine Aufgabe, um sie an Ihren Blobspeicher zu senden. Die Tatsache, dass Sie Cordova als Client verwenden, ist irrelevant. Der Server sollte nicht wissen, wer der Plattform-Client ist, sondern nur wie er mit der Anfrage umgehen soll.

+0

danke für deine antwort. Nur zu deiner Information. Um in den Blobspeicher zu blocken, muss man ein einmalig erstelltes URI erhalten, um sie zu posten.also erhalte ich eine eindeutige post url von azure service als call back result und bin in der lage eine put zu machen aber image wird als 64 bit codiertes format nicht byte array hochgeladen welches den azure blob speicher benutzt. Problem ist, dass FileReader, reader.onloaded nie ausgelöst wird. Es erzeugt keinen Fehler oder nichts – wil

+0

Ich möchte nur hinzufügen, dass ich Byte-Array mit einer Website ohne ein Problem hochladen kann, nur nicht Phonegap - ionic – wil

Verwandte Themen