在Firebase存储中存储和检索base64编码的字符串



我有一个Base64编码的字符串(这是AES加密的字符串(。我正在尝试将其存储在Firebase存储中,然后从中下载。

我尝试了多种选择,例如

pathReference.putString(data, 'base64')

这不会将base64字符串保留在存储中,而是将其转换为整数。我也尝试过提供{contentType:"application/Base64&"},但putString似乎不起作用。

然后我试着把它做成一个斑点

blob = new Blob([data], {type: "application/Base64"})
await pathReference.put(blob)

有了这个,我可以在存储中获得base64编码的字符串(尽管字符串中添加了换行符(

当我用ES6获取下载它时,我不会返回字符串

const url = await pathReference.getDownloadURL()
const response = await fetch(url)
const data = await response.blob()

而是得到一个错误未处理的承诺拒绝:URI错误:URI错误

我只是在寻找一个非常简单的上传和下载示例,用于base64编码的字符串到firebase存储。

非常感谢您的帮助。

我能够让它工作,尽管一些带有react原生行为的firebase/fetch仍然不清楚。

为了将base64编码的字符串上传到firebase存储,我使用了以下片段
此处"数据";已是Base64编码的字符串。

const pathReference = storage.ref(myFirebaseStorageLocation)
const blob = new Blob([data], {type: "application/Base64"})
await pathReference.put(blob)

我验证了Firebase存储中的内容,并手动下载了文件,这看起来也很好。

然后在React Native Expo项目下下载时遇到了几个障碍,但最终奏效的是这个

  1. 我不得不在全局命名空间中添加一个btoa((函数
  2. 使用以下代码下载,然后将其作为Base64字符串读回(这令人惊讶地难以访问(

下载文件并以Base64字符串形式读回的代码。

const fetchAsBlob = url => fetch(url)
.then(response => response.blob());
const convertBlobToBase64 = blob => new Promise((resolve, reject) => {
const reader = new FileReader;
reader.onerror = reject;
reader.onload = () => {
resolve(reader.result);
};
reader.readAsDataURL(blob);
});

const url = await pathReference.getDownloadURL()
const blob = await fetchAsBlob(url)
const doubleBase64EncodedFile = await convertBlobToBase64(blob)
const doubleEncodedBase64String = doubleBase64EncodedFile.split(',')[1]
const myBase64 = Base64.atob(doubleEncodedBase64String)

需要注意的是,FileReader读取内容并将其再次编码为Base64(因此存在双重编码(。我不得不使用Base64.atob((来取回我原来的Base64编码字符串。

同样,这可能是React Native Expo项目下调用fetch的情况所特有的,这两个项目在处理Blob或Base64时都有一些额外的怪癖。

(附言:我尝试过使用response.blob((、response.buffer((,并尝试过包括libs在内的所有方法将blob转换为Base64字符串,但遇到了一个或另一个问题。我还尝试过使用Expo FileSystem,在本地下载文件,并使用FileSystem.readAsStringAsync进行读取,但在iOS中遇到了本机问题。tl;博士上述解决方案奏效了,但如果有人能对所有其他尝试或更好的解决方案做出任何解释或澄清,我们将不胜感激。同样不清楚的是firebase存储putString(data,'base64'(不起作用的原因。(

最新更新