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

时间:2016-09-08 07:41:35

标签: javascript image firebase react-native firebase-storage

预信息:

我仍然打开了Firebase项目,并且我仍然成功使用了Firebase数据库(所以 firebase.initializeApp(config) 正常工作)。 我在Firebase Storage的“ / Images / ”文件夹中上传了几张图片,并将其命名为 image1.jpg image2.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。试图在sampleImage对象中使用source作为<Image>空图片

    2.2。尝试log sampleImage undefined

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

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

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

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

      

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

    非常感谢你提前帮助。

3 个答案:

答案 0 :(得分:3)

你的第一个似乎是正确的基于文档。我相信你收到了一个错误,所以连接错误回调:

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

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

答案 1 :(得分:3)

<强>更新

我向Firebase支持部门报告了此问题,我收到了以下回复:

  

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

<强>研究

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

然而,当覆盖this stack overflow thread getDownloadURL()中描述的react-native的XMLHttpRequest polyfill将正常完成并返回有效的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})
  })
}); 

这是一个似乎影响少量用户的问题,因为我只看到了提出的问题here。然而,这似乎是一个真正的错误,当它发生时它非常虚弱,所以任何更多的输入将非常感激。

答案 2 :(得分:0)

要从存储设备中获取所有图像

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
         })
     });
})