当前位置: 首页 > 知识库问答 >
问题:

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

马峻
2023-03-14

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

我尝试过多种选择,例如

pathReference.putString(data, 'base64')

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

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

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

非常感谢任何帮助。

共有1个答案

庄飞
2023-03-14

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

为了将base64编码的字符串上传到firebase存储,我使用了以下代码片段。
这里的“data”已经是base64编码的字符串。

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

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

    null
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本地Expo项目下调用fetch的情况所独有的,这两个项目在处理blob或base64时都有一些额外的怪癖。

(PS:我尝试使用response.blob()、response.buffer(),并尝试了包括libs在内的所有方法将blob转换为Base64字符串,但遇到了这样或那样的问题;我还尝试使用Expo文件系统,在本地下载文件并使用FileSystem.readasstringasync读取文件,但遇到了iOS.tl;dr的本地问题;上述解决方案有效,但如果有人能就所有其他尝试或更好的解决方案提供任何解释或澄清,那么将非常感谢。同样不清楚的是为什么firebase storage putString(数据,'Base64')不起作用。)

 类似资料:
  • 我试图从我的移动混合应用程序(离子3)发送一张图片到我的Heroku后端(Node.js),并让后端将图片上传到Firebase存储,并将新上传的fil下载url返回到移动应用程序。 上载成功,但当我转到Firebase存储控制台时,当我试图显示图片的预览时出现错误,下载时无法从计算机打开它。我想这是一个编码的东西...? 如何检索新上传的文件下载url?我希望在中返回一个对象,就像在函数中一样,

  • 问题内容: 如何在SQLite中存储和获取图像以及以什么格式保存图像?如果用一个例子来解释会更有用。 问题答案: 图像本身无法存储到数据库列中,但是您可以先将其转换为字符串,然后再存储。该字符串称为base64字符串。据我所知,任何图像都可以转换为相反的图像。 编码为基数64: 现在,您的UIImage对象将转换为String!将strBase64保存到SQLite DB。记住要用作列类型,因为此

  • 问题内容: 我想存储值并从Java HashMap中检索它们。 这是我到目前为止所拥有的: 我想从HashMap中检索所有键和值作为Java集合或实用程序集(例如)。 我知道只要知道密钥就可以获取值,例如: 有没有办法检索键值作为列表? 问题答案: Java Hashmap键值示例: