从 firebase 存储下载 url 为空
download url from firebase storage comes empty
我正在使用 ionic 4 将图像从相机上传到 firebase 存储。上传正常,但我很难上传 URL。我的代码如下所示:
async getFromCamera(){
this.camera.getPicture({
destinationType: this.camera.DestinationType.DATA_URL,
quality: 25,
correctOrientation: true,
allowEdit:false
}).then(async (imageData) => {
var base64Image = "data:image/jpeg;base64," + imageData;
this.uploadToFireStore(base64Image).then(
(data) => console.log("done to firestore:" + data),
(err) => console.log("The error to upload is:::" + JSON.stringify(err))
)
}, (err) => {
console.log("Error found is:" + err);
});
}
uploadPercent
downloadURL
uploadToFireStore(imageData){
return new Promise<any>((resolve, reject) => {
let storageRef = this.storage.ref('/');
let imageRef = storageRef.child('myimage')
const task = imageRef.putString(imageData, 'data_url')
console.log("Task is:::" + task)
// observe percentage changes
this.uploadPercent = task.percentageChanges();
// get notified when the download URL is available
task.snapshotChanges().pipe(
finalize(() => {
this.downloadURL = imageRef.getDownloadURL()
console.log("upload percent:" + JSON.stringify(this.uploadPercent))
console.log("download url is::" + JSON.stringify(this.downloadURL))
}
)
)
.subscribe()
})
}
我看到的回复是:
upload percent:{"_isScalar":false,"source":{"_isScalar":false},"operator":{}}
/tab1-tab1-module.js:629 download url is::{"_isScalar":false}
Firebase 存储可让您上传文件,因此您无需上传长 base64
字符串。为什么还要上传base64
?
我不熟悉什么this.camera.getPicture
方法returns,但很确定它是File
的一种。在那种情况下:
}).then(imageData => {
this.uploadToFireStore(imageData)
和
uploadToFireStore(imageData){
let storageRef = this.storage.ref('/');
let imageRef = storageRef.child('myimage')
const task = imageRef.upload(imageData, 'data_url')
this.uploadPercent = task.percentageChanges();
task.snapshotChanges().pipe(
finalize( async () => {
await this.downloadURL = imageRef.getDownloadURL().toPromise();
console.log('this.downloadURL', this.downloadURL)
}
)
)
.subscribe()
注意 finalize
需要一个 async
函数,因为 imageRef.getDownloadURL()
returns 是一个 Observable,所以我们只需要它的一个值,这是唯一的值我们需要这个流,将它转换为 Promise 看起来更干净。
我正在使用 ionic 4 将图像从相机上传到 firebase 存储。上传正常,但我很难上传 URL。我的代码如下所示:
async getFromCamera(){
this.camera.getPicture({
destinationType: this.camera.DestinationType.DATA_URL,
quality: 25,
correctOrientation: true,
allowEdit:false
}).then(async (imageData) => {
var base64Image = "data:image/jpeg;base64," + imageData;
this.uploadToFireStore(base64Image).then(
(data) => console.log("done to firestore:" + data),
(err) => console.log("The error to upload is:::" + JSON.stringify(err))
)
}, (err) => {
console.log("Error found is:" + err);
});
}
uploadPercent
downloadURL
uploadToFireStore(imageData){
return new Promise<any>((resolve, reject) => {
let storageRef = this.storage.ref('/');
let imageRef = storageRef.child('myimage')
const task = imageRef.putString(imageData, 'data_url')
console.log("Task is:::" + task)
// observe percentage changes
this.uploadPercent = task.percentageChanges();
// get notified when the download URL is available
task.snapshotChanges().pipe(
finalize(() => {
this.downloadURL = imageRef.getDownloadURL()
console.log("upload percent:" + JSON.stringify(this.uploadPercent))
console.log("download url is::" + JSON.stringify(this.downloadURL))
}
)
)
.subscribe()
})
}
我看到的回复是:
upload percent:{"_isScalar":false,"source":{"_isScalar":false},"operator":{}}
/tab1-tab1-module.js:629 download url is::{"_isScalar":false}
Firebase 存储可让您上传文件,因此您无需上传长 base64
字符串。为什么还要上传base64
?
我不熟悉什么this.camera.getPicture
方法returns,但很确定它是File
的一种。在那种情况下:
}).then(imageData => {
this.uploadToFireStore(imageData)
和
uploadToFireStore(imageData){
let storageRef = this.storage.ref('/');
let imageRef = storageRef.child('myimage')
const task = imageRef.upload(imageData, 'data_url')
this.uploadPercent = task.percentageChanges();
task.snapshotChanges().pipe(
finalize( async () => {
await this.downloadURL = imageRef.getDownloadURL().toPromise();
console.log('this.downloadURL', this.downloadURL)
}
)
)
.subscribe()
注意 finalize
需要一个 async
函数,因为 imageRef.getDownloadURL()
returns 是一个 Observable,所以我们只需要它的一个值,这是唯一的值我们需要这个流,将它转换为 Promise 看起来更干净。