我尝试了所有可能找到的途径,找到了很多解决方案,但似乎没有一个适合我的应用程序!
我已经到了可以将照片与所有其他信息成功上传到Firebase的地步,但是当我尝试检索已上传文件的URL时,它会一直说
Reference.child失败:第一个参数是无效路径=“未定义”。路径必须是非空字符串,并且不能包含“。”,“#”,“ $”,“ [”或“]”
但是我可以看到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
那么现在如何获取此网址?
.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
})
})
答案 0 :(得分:1)
在您的第二个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
})
答案 1 :(得分:0)
大约半年前,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
})
})