我正在创建一个使用ionic 3和firebase的聊天应用程序。在配置文件pic部分中,我允许用户上传图像。图像上传得很好并且在我的firebase存储中可见,但是用户上传的每个图像都是4个字节而预览不可用,因此,配置文件图像不会设置为新图像。 请帮助解决这个问题 亲切的问候, Aditya
Imagehandler.ts(That uploads file to firebase)
import { Injectable } from '@angular/core';
import { File } from '@ionic-native/file';
import { FileChooser } from '@ionic-native/file-chooser';
import { FilePath } from '@ionic-native/file-path';
import firebase from 'firebase';
/*
Generated class for the ImghandlerProvider provider.
See https://angular.io/docs/ts/latest/guide/dependency-injection.html
for more info on providers and Angular 2 DI.
*/
@Injectable()
export class ImghandlerProvider {
nativepath: any;
firestore = firebase.storage();
constructor(public filechooser: FileChooser) {
}
uploadimage() {
var promise = new Promise((resolve, reject) => {
this.filechooser.open().then((url) => {
(<any>window).FilePath.resolveNativePath(url, (result) => {
this.nativepath = result;
(<any>window).resolveLocalFileSystemURL(this.nativepath, (res) => {
res.file((resFile) => {
var reader = new FileReader();
reader.readAsArrayBuffer(resFile);
reader.onloadend = (evt: any) => {
var imgBlob = new Blob([evt.target.result], { type: 'image/jpeg' });
var imageStore = this.firestore.ref('/profileimages').child(firebase.auth().currentUser.uid);
imageStore.put(imgBlob).then((res) => {
this.firestore.ref('/profileimages').child(firebase.auth().currentUser.uid).getDownloadURL().then((url) => {
resolve(url);
}).catch((err) => {
reject(err);
})
}).catch((err) => {
reject(err);
})
}
})
})
})
})
})
return promise;
}
}
user.ts(处理所有用户方法)
import { Injectable } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import firebase from 'firebase';
/*
Generated class for the UserProvider provider.
See https://angular.io/docs/ts/latest/guide/dependency-injection.html
for more info on providers and Angular 2 DI.
*/
@Injectable()
export class UserProvider {
firedata = firebase.database().ref('/users');
constructor(public afireauth: AngularFireAuth) {
}
adduser(newuser) {
var promise = new Promise((resolve, reject) => {
this.afireauth.auth.createUserWithEmailAndPassword(newuser.email, newuser.password).then(() => {
this.afireauth.auth.currentUser.updateProfile({
displayName: newuser.displayName,
photoURL: ''
}).then(() => {
this.firedata.child(this.afireauth.auth.currentUser.uid).set({
uid: this.afireauth.auth.currentUser.uid,
displayName: newuser.displayName,
photoURL: 'https://firebasestorage.googleapis.com/v0/b/myapp-4eadd.appspot.com/o/chatterplace.png?alt=media&token=e51fa887-bfc6-48ff-87c6-e2c61976534e'
}).then(() => {
resolve({ success: true });
}).catch((err) => {
reject(err);
})
}).catch((err) => {
reject(err);
})
}).catch((err) => {
reject(err);
})
})
return promise;
}
passwordreset(email) {
var promise = new Promise((resolve, reject) => {
firebase.auth().sendPasswordResetEmail(email).then(() => {
resolve({ success: true });
}).catch((err) => {
reject(err);
})
})
return promise;
}
updateimage(imageurl) {
var promise = new Promise((resolve, reject) => {
this.afireauth.auth.currentUser.updateProfile({
displayName: this.afireauth.auth.currentUser.displayName,
photoURL: imageurl
}).then(() => {
firebase.database().ref('/users/' + firebase.auth().currentUser.uid).update({
displayName: this.afireauth.auth.currentUser.displayName,
photoURL: imageurl,
uid: firebase.auth().currentUser.uid
}).then(() => {
resolve({ success: true });
}).catch((err) => {
reject(err);
})
}).catch((err) => {
reject(err);
})
})
return promise;
}
}