我已经将一些图片上传到 firebase 的存储中,然后我需要在网站上显示所有这些图片。我已经阅读了 firebase 的文档,但仍然找不到显示所有图片的正确方法。所以,我的问题是,我的代码哪里错了,无法显示单个图像?如何同时在网络上显示所有图片(我看了一篇关于stack overflow的帖子,它可能需要获取所有图片的URL,所以,子问题是如何获取所有图片的URL)?顺便说一下,我的 firebase 数据库是空的。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script src="https://www.gstatic.com/firebasejs/3.2.1/firebase.js"></script>
<script>
var config =
{
apiKey: "AIzaSyCKtgPuXUUqoyiwEm5sU3Blqc-A9xtBFsI",
authDomain: "cropped-images.firebaseapp.com",
databaseURL: "https://cropped-images.firebaseio.com",
storageBucket: "cropped-images.appspot.com",
};
firebase.initializeApp(config);
var storage = firebase.storage();
var storageRef = storage.ref();
var tangRef = storageRef.child('images/Tang.png');
tangRef.getDownloadURL().then(function(url)
{
var test = url
document.querySelector('img').src = test;
}).catch(function(error)
{
switch (error.code)
{
case 'storage/object_not_found':
break;
case 'storage/unauthorized':
break;
case 'storage/canceled':
break;
case 'storage/unknown':
break;
}
});
var test = 'firebase_url';
document.querySelector('img').src = test;
</script>
<img height="125" width="125"/>
</body>
</html>
这是我的 firebase 控制台的存储。
原文由 OregonDuck 发布,翻译遵循 CC BY-SA 4.0 许可协议
获取文件的下载 URL 需要往返 Firebase 服务器。此调用(与大多数现代互联网一样)是异步发生的,因为在等待响应时阻塞浏览器将是糟糕的用户体验。
查看代码流程的最简单方法是添加一些日志语句:
控制台输出将是:
可能不是您预期的顺序,这意味着将下载 URL 设置 为 HTML 的代码必须在
then()
回调中。您还忽略了
catch()
回调中可能引发的错误。如果您在那里添加一些日志记录:代码不仅短了 _很多_,而且实际上准确地显示了问题所在:
403 表示您无权读取图像。您的存储桶很可能仍有默认安全规则,这意味着只有经过身份验证的用户才能访问这些文件。这在 Firebase 存储文档的第一个蓝色注释中提到,用于读取/写入文件(强调我的):
在这种情况下,我采用了强调的方法并添加了代码以在请求图像的下载 URL 之前让用户(匿名)登录。这导致以下完整的代码片段:
完整的工作 jsbin: http://jsbin.com/kukifo/edit ?html,js,console,output