繁体   English   中英

React-Native:从 Firebase 存储下载图像

[英]React-Native: Download Image from Firebase Storage

预告:

我仍然打开了一个 Firebase 项目,并且我仍在成功使用 Firebase 数据库(因此firebase.initializeApp(config)有效)。 我在 Firebase 存储的文件夹“ /Images/ ”中上传了几张图片,并将它们命名为image1.jpgimage2.jpg 、..

React-Native:0.31.0,Firebase:3.3.0

我想要的是:

我想从 Firebase 存储中获取图像并将它们放入<Image>

我实际上做了什么:

var storageRef = firebase.storage().ref('Images/image1.jpg');

//1. Try:
storageRef.getDownloadURL().then(function(url) {
  console.log(url);
)}

//2. Try:
var sampleImage = storageRef.getDownloadURL().then(function(url) {
  console.log(url);
)}

//3. Try:
var sampleImage = storageRef.getDownloadURL();

关于代码的信息:

  1. 代码没有到达console.log(url)

    2.1。 试图在<Image>对象中使用sampleImage作为source空图像

    2.2. 试图log sampleImageundefined

    2.3. 试图log url没有达到这一点

    3.1。 试图在<Image>对象中使用sampleImage作为source空图像

    3.2. 试图log sampleImage{ F: 0, ka: undefined, o: { F: 0, ... } }

所有尝试在 2-3 分钟后返回相同的错误代码。

Firebase 存储:超出操作的最大重试时间,请重试。

非常感谢您的帮助。

根据文档,您的第一个似乎是正确的。 我相信你遇到了一个错误,所以也要连接一个错误回调:

storageRef.getDownloadURL().then(function(url) {
    console.log(url);
}, function(error){
    console.log(error);
});

请参阅: https ://firebase.google.com/docs/reference/js/firebase.storage.Reference#getDownloadURL

更新

我将此问题报告给 Firebase 支持,并得到以下回复:

我们的工程师回来了,这似乎是一个特定于 Android 的问题(适用于 iOS)[..] 我们目前正在解决这个问题,但至于时间线,我们目前无法分享任何内容

研究

看来这是由 react-native 的 XMLHttpRequest 引起的实际错误。 当以您描述的相同方式尝试 getDownloadURL() 时,会发生同样的事情(即达到最大重试时间)。

但是,当按照此堆栈溢出线程中的描述覆盖 react-native 的 XMLHttpRequest 的 polyfill 时,getDownloadURL() 将正常完成并返回一个有效的 URL。

我们正在使用 react-native v0.33.0,Firebase v3.4.1

解决方法

与此同时,我们一直在使用这种解决方法; 绕过 Firebase API:

var bucket = firebase.storage().ref().bucket;
var firebaseUrl = "https://firebasestorage.googleapis.com/v0/b/" + bucket + "/o/";
var finalUrl = firebaseUrl + 'path%2Fto%2Fresource';
firebase.auth().currentUser.getToken()
.then((token) => {
  fetch(finalUrl, {headers: {'Authorization' : 'Firebase ' + token}})
  .then((response) => response.json())
  .then((responseJson) => {
    var downloadURL = finalUrl + "?alt=media&token=" + responseJson.downloadTokens})
  })
}); 

这是一个似乎会影响少量用户的问题,因为我只看到了此处提出的问题。 然而,这似乎是一个实际的错误,并且当它发生时非常令人衰弱,所以任何更多的输入将不胜感激。

从存储中获取所有图像

firebase.storage().ref().child('filename').list().then(result => {
    // Loop over each item
    result.items.forEach(pics => {
        firebase.storage().ref().child(pics.fullPath).getDownloadURL().then((url) => {
            console.log(url);
            //these url will be used to display images
         })
     });
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM