我想让用户用相机拍照并将其用作新的个人资料照片。要拍照,我使用这个功能:
capture(){
this.camera.getPicture({
quality: 100,
destinationType: this.camera.DestinationType.DATA_URL,
sourceType: this.camera.PictureSourceType.CAMERA,
encodingType: this.camera.EncodingType.PNG,
saveToPhotoAlbum: true
}).then(imageData => {
this.myPhoto = imageData;
this.uploadPhoto();
}, error => {
console.log("ERROR -> " + JSON.stringify(error));
});
this.api.updateUserPhoto(this.myPhotoURL);
}
其中uploadPhoto()
是
private uploadPhoto(): void {
this.myPhotosRef.child(this.generateUUID()).child('myPhoto.png')
.putString(this.myPhoto, 'base64', { contentType: 'image/png' })
.then((savedPicture) => {
this.myPhotoURL = savedPicture.downloadURL;
});
}
和generateUUUID()
是
private generateUUID(): any {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx'.replace(/[xy]/g, function (c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return uuid;
}
相机在手机上正确打开,图像保存在图库中,但用户的个人资料未随照片更新;要更新用户配置文件,我使用firebase文档中的功能,即:
updateUserPhoto(photo: any){
var user = firebase.auth().currentUser;
user.updateProfile({
displayName: user.displayName,
photoURL: photo
}).then(function() {
// Update successful.
}, function(error) {
// An error happened.
});
}
这是我在开始时发布的方法capture
中调用的函数,我传递了photoUrl生成的函数。
在新用户注册到应用程序时,默认图片将作为个人资料图片上传,并在<ion-img>
元素中正确显示;每当我尝试使用相机更改它时,拍照后,<ion-img>
会显示空白内容。这让我觉得照片实际上已经更新,因此生成的网址一定存在问题。