代码之家  ›  专栏  ›  技术社区  ›  Robin

Firebase存储-获取实际数据而不是下载URL

  •  0
  • Robin  · 技术社区  · 5 年前

    有没有办法从firebase存储中获取实际数据,而不是下载URL?在我的例子中,我将字符串(一定量的html)存储到存储器中,并希望在需要时获取实际数据。

    但我不知道该怎么做。根据 firebase documentation 我可以获得可下载的url,但无法获取实际数据。

    这是从存储中获取数据的函数(在测试用例中,我可以正确地获取url,但我需要实际的数据)

    // Create a reference to the file we want to download
    var starsRef = storageRef.child('images/stars.jpg');
    
    // Get the download URL
    starsRef.getDownloadURL().then(function(url) {
      // Insert url into an <img> tag to "download"
    })
    

    谢谢

    更新17.02.2020

    我解决了我的问题,我的错误!可以使用文档中提到的ajax请求从存储中下载文件。这是我定义的一个简单函数,它返回一个promise,解析后你可以得到实际的文件/数据。

    async updateToStorage(pathArray, dataToUpload) {
    
        let address = pathArray.join("/");
    
        // Create a storage ref
        let storageRef = firebase.storage().ref(address);
    
        // Upload file as string format, known as firebase task
        let uploadPromise = await storageRef.putString(dataToUpload);
    
        let url = await uploadPromise.ref.getDownloadURL();
    
        const res = await fetch(url);
    
        const content = await res.text();
    
        return content;
    }
    
    const avatar = await updateToStorage(['storage', 'uid', 'avatarUrl'], avatar.png);
    //avatar will be the actual image after download.
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Doug Stevenson    5 年前

    在web浏览器中运行的用于JavaScript的Firebase API的云存储实际上不提供下载文件原始数据的方法。这在Android和iOS上是不同的。请注意 StorageReference 与Android和iOS的同类产品不同,它没有任何直接的数据访问器。我不知道为什么。把它看作是一个可以提交的功能请求 Firebase support .

    您可能需要设置某种API端点,您的代码可以调用该端点,通过为您的网站提供服务的web服务器路由,或者通过其他支持CORS的东西路由,这样您就可以从浏览器发出跨web域的请求,而不会出现安全问题。