2016-06-07 13 views
0

Ich versuche, Fotos zu Feuerbasis Speicherung ohne Erfolg mit der cordova-plugin-Kamera zu laden:Firebase 3 + Ionic 2 + cordova-plugin-Kamera - Datei hochladen

Hier ist mein Code:

let options:any = { 
    quality : 100, 
    destinationType : Camera.DestinationType.DATA_URL, 
    sourceType : Camera.PictureSourceType.CAMERA, 
    allowEdit : false, 
    encodingType: Camera.EncodingType.JPEG, 
    mediaType: Camera.MediaType.PICTURE, 
    targetWidth: 1920, 
    targetHeight: 1920, 
    saveToPhotoAlbum: true, 
    cameraDirection: Camera.Direction.FRONT 
}; 

Camera.getPicture(this.options).then((imageData) => { 

       let blob: any = new Blob([imageData], { type: "image/jpeg" }); 
       blob.name = 'image.jpg'; 

       let storageRef: any = firebase.storage().ref(); 
       let path: string = 'images/' + this.user.uid + '/' + Math.random().toString(36).substr(2, 9) + '.jpg'; 

       console.log(path); 

       let uploadTask: any = storageRef.child(path).put(blob); 

       uploadTask.on('state_changed', function(snapshot) { 
        console.log(snapshot); 
       }, function(error) { 
        this.showAlert(error); 
       }, function() { 
        var downloadURL = uploadTask.snapshot.downloadURL; 
        console.log(downloadURL); 

        console.log(this.user); 

        this.user.set({photo: downloadURL}); 
       }); 

      }, (err) => { 
       this.showAlert(err); 
      }); 

Ich weiß nicht warum, aber es scheint, dass das Hochladen und wenn ich die Datei überprüfe, leer ist.

Irgendwelche Hilfe, bitte?

Vielen Dank.

Antwort

0

Das Problem ist mit diesem Teil

let blob: any = new Blob([imageData], { type: "image/jpeg" });

Sie benötigen, um von base64 imagedata zu einem Blob zu konvertieren. Ich schlage vor, die atob-Funktion zu verwenden, um den Blob nach dieser Verbindung https://stackoverflow.com/a/16245768/3227392 zu generieren. Dies funktionierte für mich genau für den gleichen Anwendungsfall.

Ein Hinweis jedoch, DATA_URL ist speicherintensiv, so dass dies für größere Bilder problematisch sein könnte.