2017-08-05 123 views
2

我试图通过Ionic 2做小应用程序,允许我通过相机捕获图像并将所有捕获的图像上传到firebase存储并将捕获的图像URL存储到firebase数据库中。无法将捕获的图像上传到firebase存储

我做这些教程,但它不工作,并上传到火力存储没有图像,

链接

http://www.offlineprogrammer.com/upload-images-firebase-storage-using-ionic-framework/ https://www.youtube.com/watch?v=6yGrLWq-oIo

这些我码U可以想看看我是否犯了一些错误

app.component.ts

... 
import firebase from 'firebase'; 
... 
constructor(...) { 

platform.ready().then(() => { 
    // Okay, so the platform is ready and our plugins are available. 
    // Here you can do any higher level native things you might need. 
    statusBar.styleDefault(); 
    splashScreen.hide(); 
}); 

firebase.initializeApp({ 
    apiKey: "XXXXXXXXXXXX", 
     authDomain: "XXXXXXXXXXXXX", 
     databaseURL: "XXXXXXXXXXX", 
     projectId: "XXXXXXXXX", 
     storageBucket: "XXXXXXXXXX", 
     messagingSenderId: "XXXXXXXXXX" 
    }); 

} 

home.html做为

<ion-content class="footer"> 
    <ion-item> 
    <img class="img-responsive" src="{{ myPhotoURL }}" /> 
    </ion-item> 
</ion-content> 

home.ts

export class HomePage{ 
    public myPhotosRef: any; 
    public myPhoto: any; 
    public myPhotoURL: any; 

    constructor(...){ 
    this.myPhotosRef = firebase.storage().ref('/Photos/'); 
    } 

    takePicture(){ 
    const options: CameraOptions = { 
     quality: 80, 
     destinationType: this.camera.DestinationType.DATA_URL, 
     sourceType: this.camera.PictureSourceType.CAMERA, 
     allowEdit: true, 
     encodingType: this.camera.EncodingType.JPEG, 
     saveToPhotoAlbum: false 
    } 
    this.camera.getPicture(options).then((imageData) => { 
     this.myPhoto = imageData; 
     this.uploadPhoto(); 
    }); 
    } 

    private uploadPhoto(): void { 
    this.myPhotosRef.child(this.generateUUID()).child('myPhoto.png') 
     .put(this.myPhoto, 'base64', { contentType: 'image/png' }) 
     .then((savedPicture) => { 
     this.myPhotoURL = savedPicture.downloadURL; 
    }); 
    } 

    private generateUUID(): any { 
    let d = new Date().getTime(); 
    let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx'.replace(/[xy]/g, function (c) { 
     let r = (d + Math.random() * 16) % 16 | 0; 
     d = Math.floor(d/16); 
     return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); 
    }); 
    return uuid; 
    } 
} 

回答

1

你必须如下所示与因此PNG取代JPEG你的contentType: 'image/png'

encodingType: this.camera.EncodingType.PNG, 

,还可以设置这个作为true

saveToPhotoAlbum: true

+1

由于没有@Sampath,是的,我忘了改JPEG –

0

我解决了这个问题,通过这些变化

takePicture(){ 
const options: CameraOptions = { 
    quality : 75, 
     destinationType : this.camera.DestinationType.DATA_URL, 
     sourceType : this.camera.PictureSourceType.CAMERA, 
     allowEdit : true, 
     encodingType: this.camera.EncodingType.JPEG, 
     saveToPhotoAlbum: true 
} 
this.camera.getPicture(options).then((imageData) => { 
     this.myPhoto = imageData; 
    this.uploadPhoto(); 
    }); 
} 

private uploadPhoto(): void { 
this.myPhotosRef.child(this.generateUUID()).child('myPhoto.JPEG') 
    .putString(this.myPhoto, 'base64', { contentType: 'image/JPEG' }) 
    .then((savedPicture) => { 
    this.myPhotoURL = savedPicture.downloadURL; 
    }); 
}