Как получить URL-адрес из getDownloadURL () - PullRequest
0 голосов
/ 21 декабря 2018

Я перепробовал все возможные пути, я нашел много решений, но ни одно из них не подходит для моего приложения!

Я попал в точку, где я успешно загрузил фотографию в Firebase вместе со всей другой информацией, однако, когда я пытаюсь получить URL для загруженного файла, он продолжает говорить

Reference.child не удалось: первый аргумент был неверный путь = "undefined".Пути должны быть непустыми строками и не могут содержать ".", "#", "$", "[" Или "]"

, однако я вижу, что URL находится внутрисписка

{a: 0, i: undefined, c: A, b: null, f: null, …}
a: 2
b: null
c: null
f: null
g: false
h: false
i: "https://firebasestorage.googleapis.com/v0/b/hikershangout.appspot.com/o/hangouts%2F-LUDFPpNTBdAdmUu_gLW..jpg?alt=media&token=cffdd574-1b9d-426e-a078-8d18ca5bdf7f"
__proto__: Object

Итак, как получить этот URL?

.then (key => {
  const filename = payload.image.name
  const ext = filename.slice(filename.lastIndexOf('.'))
  return firebase.storage().ref('hangouts/' + key + '.' + ext).put(payload.image)
})
.then(fileData => {
  imageUrl = fileData.ref.getDownloadURL()
  console.log(imageUrl)
  return firebase.database().ref('hangouts').child(key).update({imageUrl: imageUrl})
})
.then(() => {
  commit('createHangout', {
    ...hangout,
    imageUrl: imageUrl,
    id: key
  })
})

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Так как около полугода назад getDownloadUrl() не сразу возвращает URL-адрес загрузки, но возвращает обещание, которое разрешается с помощью URL-адреса загрузки.

Фил также прав, что ни key, ни imageUrl будет определено в вашем окончательном then().

Так что вам может понадобиться:

var key, imageUrl;

...
.then (key => {
  const filename = payload.image.name
  const ext = filename.slice(filename.lastIndexOf('.'))
  this.key = key;
  return firebase.storage().ref('hangouts/' + key + '.' + ext).put(payload.image)
})
.then(fileData => {
  return fileData.ref.getDownloadURL()
}).then((imageUrl) => {
  console.log(imageUrl)
  this.imageUrl = imageUrl;
  return firebase.database().ref('hangouts').child(key).update({imageUrl: imageUrl})
})
.then(() => {
  commit('createHangout', {
    ...hangout,
    imageUrl: imageUrl,
    id: key
  })
})
0 голосов
/ 21 декабря 2018

В вашем втором then(), key не определено, но вы пытаетесь использовать его в child(key).

Я бы порекомендовал объединить первые два блока then(), чтобы все, что вам нужнодоступен.Например

.then (key => {
  const filename = payload.image.name
  const ext = filename.slice(filename.lastIndexOf('.'))
  return firebase.storage().ref('hangouts/' + key + '.' + ext).put(payload.image).then(fileData => {
    const imageUrl = fileData.ref.getDownloadURL()
    console.log(imageUrl)
    return firebase.database().ref('hangouts').child(key).update({ imageUrl })
  })
}).then(() => {
  commit(...)
  // etc
})
...