有一种下载方法,如下所示:
const image = await storage.child('img/'+usrname+'.jpg').getDownloadURL();
this.setState({image});
但是我想要什么?
我想直接获取图像,如下所示:
https://firebase.google.com/storage/img/@david.jpg
https://firebase.google.com/storage/img/@jack.jpg
https://firebase.google.com/storage/img/@harry.jpg
为什么要像上面一样
因为我有一个包含名称,电话和用户名的用户列表,所以我在其中按每个用户的用户名(username.jpg)保存了图像。
现在,当我列出使用循环的用户时,如下所示:
users = [];
for(let i=0; i<usersData.length; i++){
const user = {
name: usersData[i].name,
phone: usersData[i].phone,
image: 'https://firebase.google.com/storage/img/'+usersData[i].username
}
users.push(user);
}
注意: 不要对url( https://firebase.google.com/storage/ )感到困惑,我只是举了一个例子。
答案 0 :(得分:0)
我认为Firebase不能给我们直接链接
https://firebase.google.com/storage/img/@david.jpg
https://firebase.google.com/storage/img/@jack.jpg
因为它不以这种形式的URL包含任何项目特定的数据(如您的存储桶名称,项目ID,用于身份验证的令牌等)。 如果您认为会增加存储中文件的安全性,因为没有人可以随机猜测是否可以访问存储数据。
在您的情况下,您可能必须朝这个方向前进。
在这里,我们首先遍历userData列表,以使用Promise.all
聚合所有promise,然后在then
中获得解析的promises
列表,其中存在图像的URL。
最后,我们在user
对象上设置了各种属性,并将其推送到users数组。
users = [];
userPromise = Promise.all(
userData.map(data =>
firebase.storage()
.refFromURL('gs://<your bucket here>/img')
.child( data.username+'.jpg' ).getDownloadURL()
)
)
.then(ImgUrls =>{
ImgUrls.map((ImgUrl,i) => {
console.log(ImgUrl)
const user ={
name:userData[i],
phone: usersData[i].phone,
image: ImgUrl
}
console.log(user);
users.push(user);
});
});
console.log(users);