Firebase не возвращает downloadURL в метаданных с машинописью и Ionic3 - PullRequest
0 голосов
/ 08 июня 2018

Я уже несколько дней пытаюсь заставить Firebase вернуть downloadURL в метаданных.По общему мнению, он должен быть там, поскольку метаданные включают fullPath и другую информацию, но только не downloadURL.

  addItem(
itemName: string,
eventId: string,
itemPicture: string = null
): PromiseLike<any> {
    return this.activityListRef
      .child(`${eventId}/itemList`)
      .push({ itemName })
      .then(newItem => {
        this.activityListRef.child(eventId).transaction(event => {
          return event;
        });
        if (itemPicture != null) {
          return firebase
            .storage()
            .ref(`/item/${newItem.key}/profilePicture.png`)
            .putString(itemPicture, 'base64', { contentType: 'image/png' })
            .then(savedPicture => {
            console.log(savedPicture.metadata);
              this.activityListRef
                .child(`${eventId}/itemList/${newItem.key}/profilePicture`)
                .set(savedPicture.downloadURL);
            });
        }
      });
  }

, если я войду в консоль, я могу видеть все, кроме downloadURL

Я также попытался изменить .set (savePicture.downloadURL);to .set (savePicture.metadata.downloadURLS [0]);

, но по-прежнему нет элементов downloadURL ни в одном из параметров ответа.

Есть идеи?

1 Ответ

0 голосов
/ 08 июня 2018

после загрузки необработанной строки с помощью метода putString, используйте тот же ref и используйте метод getDownloadUrl () для получения URL, как показано ниже,

storage()
        .ref(`/item/${newItem.key}/profilePicture.png`).getDownloadUrl() // which returns promise in turn returns the image url once it's available.

В вашем случае вы можете сделать, как показано ниже

var storageRef = firebase.storage().ref(`/item/${newItem.key}/profilePicture.png`)

return storageRef.putString(itemPicture, 'base64', { contentType: 'image/png' })
        .then(savedPicture => {
              storageRef.getDownloadUrl()
                .then(url =>{
                  this.activityListRef
                 .child(`${eventId}/itemList/${newItem.key}/profilePicture`)
                 .set(url);
         });             
 });

Надеюсь, это поможет

...