如何获取图片网址而不下载?

时间:2019-06-21 18:38:45

标签: javascript firebase firebase-storage

有一种下载方法,如下所示:

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/ )感到困惑,我只是举了一个例子。

1 个答案:

答案 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);