Firebase存储-获取实际数据而不是downloadURL

时间:2020-02-06 06:20:08

标签: javascript firebase firebase-storage

有什么方法可以从Firebase存储中获取实际数据而不是downladURL吗?就我而言,我将字符串(一些html)存储到存储中,我想在需要时获取实际数据。

但是我不知道该怎么做。根据{{​​3}},我可以获取可下载的网址,但无法获取实际数据。

这是从存储中获取数据的功能(在测试案例中,我可以正确获取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"
})

谢谢

更新2020年2月17日

我解决了我的问题,我的错误!可以使用文档中提到的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 个答案:

答案 0 :(得分:1)

在Web浏览器中运行的Cloud Storage for Firebase APIs JavaScript实际上没有提供下载文件原始数据的方法。这在Android和iOS上有所不同。请注意,StorageReference没有任何直接的数据访问器,这与Android和iOS的同类产品不同。我不知道为什么会这样。可以将其视为可以向Firebase support提交的功能请求。

您可能需要设置某种代码可以调用的API端点,该端点可以通过服务于您网站的Web服务器或其他支持CORS的路由进行路由,以便您可以从浏览器中发出请求跨网域而没有安全问题。