如何从 getDownloadURL() 获取 url
Posted
技术标签:
【中文标题】如何从 getDownloadURL() 获取 url【英文标题】:How to obtain the url from getDownloadURL() 【发布时间】:2019-05-21 12:32:23 【问题描述】:我已经尝试了所有我能找到的途径,我找到了很多解决方案,但没有一个似乎适合我的应用程序!
我已经成功地将照片连同所有其他信息一起上传到 Firebase,但是当我尝试检索已上传文件的 URL 时,它一直说
Reference.child 失败:第一个参数是无效路径 =“未定义”。路径必须是非空字符串,并且不能包含“.”、“#”、“$”、“[”或“]”
但是我可以看到网址在列表中
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
)
)
【问题讨论】:
【参考方案1】:从大约半年前开始,getDownloadUrl()
不再立即返回下载 URL,而是返回一个通过下载 URL 解析的承诺。
Phil 也是正确的,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
)
)
【讨论】:
感谢您的帮助!但是我仍然很难让它发挥作用!这是我的 github 存储库和 firebase 上的实时站点......你有没有机会看看我做错了什么??? github.com/dothecoolwip/help2hikersmeetup.firebaseapp.com 原来我实际上无法从代码中获取 KEY ......我迷失了如何获取它,请帮助。大声笑 抱歉,我们可以在 repo 中添加大量代码来有效地提供帮助,这就是为什么 Stack Overflow 在您创建 minimal, complete, self-contained example 时效果最好的原因。例如:您问题中的代码没有显示在第一个then
之前发生了什么,因此我们无法知道密钥的含义,也不知道它应该来自哪里。【参考方案2】:
在您的第二个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
)
【讨论】:
感谢您的帮助!但是我仍然很难让它发挥作用!这是我的 github 存储库和 firebase 上的实时站点......你有没有机会看看我做错了什么??? github.com/dothecoolwip/help2hikersmeetup.firebaseapp.com以上是关于如何从 getDownloadURL() 获取 url的主要内容,如果未能解决你的问题,请参考以下文章
在回调中在firebase上上传两个文件但无法获取两个文件的getDownloadUrl
为啥使用异步函数“getDownloadURL”来获取 Firebase 存储中的文件 URL
Firebase getDownloadURL() 在获取图片 URL 时真的很慢
使用 getDownloadURL() 从 firebase 存储加载图像不起作用