Я пытаюсь получить URL, который должен вернуть getDownloadURL ().Однако на самом деле он возвращает мне данные типа this .
Мне удалось отобразить их в формате HTML, однако моя настоящая цель - получить URL, который можно увидеть на изображении.Я написал, чтобы я мог получить его и сохранить в моей базе данных Firestore.Однако я не знаю, как получить это значение.Это мой фрагмент:
getImgFromServer(imgName: string): string {
let img;
let downloadIMG;
img = firebase.storage().ref("/imgs/" + imgName).getDownloadURL();
let ref= firebase.storage().ref();
const imgRef = ref.child("/imgs/" + imgName);
imgRef.getDownloadURL().then(function(url){
downloadIMG=url;
img = downloadIMG;
console.log("MY URL " + downloadIMG)
})
console.log("img")
console.log(img)
return img
}
При отладке этого журнала этот код печатает URL-адрес, который я хочу использовать:
console.log("MY URL " + downloadIMG)
МОЙ URL https://firebasestorage.googleapis.com/v0/b/static-epigram-189720.appspot.com/o/imgs%2Fmovie-1543700476524.jpg?alt=media&token=5550a552-1ed0-488e-beed-a6bc82791293
Однако, этот распечатывает данные из изображения :
console.log(img)
Я хотел бы вернуть URL-адрес один, чтобы я мог его использовать.
РЕДАКТИРОВАТЬ
Теперь, когда я получаю URL-адрес, я хотел бы сохранить его в Cloud Firestore, чтобы я мог использовать URL-адрес в HTML, чтобы показать картинку.Это функция, которая хранит имя изображения:
createPublic(id,img){
this.firestore.doc(`public/${id}`).set({
img,
});
}
С ответом, данным Фрэнком, теперь я могу получить URL-адрес, поэтому я просто использую его для получения URL-адреса и со следующей функцией:обновите только что загруженный документ.
async updateImg(img,idPubli){
const imgToUpdate= await this.imgServ.getImgFromServer(img);
this.imgServ.updateImgFromServer(imgToUpdate,idPubli)
}
updateImgFromServer(image,id){
this.firestore.doc(`public/${id}`).set({
img:image,
});
}
Однако, похоже, он не работает.Я могу предположить, что это может быть связано с тем, что изображение или документ не были загружены до выполнения updateImg () , но я немного знаком с асинхронными функциями, поэтому мне не удается получить правильное решениесейчас.
В случае, если это поможет, это функции, в которые я загружаю изображение, и функция, которая его загружает.
submit() {
this.imgServ.uploadImage();
this.viewCtrl.dismiss({data});
}
После функции dismiss я собираю все данные и затем вызываю createPublic() функция.
uploadImage() {
this.image = 'movie-' + new Date().getTime() + '.jpg';
let storageRef: any,
parseUpload: any;
return new Promise((resolve, reject) => {
storageRef = firebase.storage().ref('imgs/' + this.image);
parseUpload = storageRef.putString(this.cameraImage, 'data_url');
parseUpload.on('state_changed', (_snapshot) => {
// We could log the progress here IF necessary
// console.log('snapshot progess ' + _snapshot);
},
(_err) => {
reject(_err);
},
(success) => {
resolve(parseUpload.snapshot);
});
});
}