从 Expo 的缓存中以 base64 格式读取文件,写入 Firebase 存储(Cloud Storage for Firebase)

Posted

技术标签:

【中文标题】从 Expo 的缓存中以 base64 格式读取文件,写入 Firebase 存储(Cloud Storage for Firebase)【英文标题】:Reading a file from Expo's cache as base64, writing to firebase storage (Cloud Storage for Firebase) 【发布时间】:2019-04-17 01:58:37 【问题描述】:

使用 expo 的 ImagePicker 并将图像保存在本地缓存中后,我正在尝试将图像保存到 firebase 存储(或其新名称,Cloud Storage for Firebase)。

相关代码为:

base64String =
  FileSystem.readAsStringAsync(photoUri,
   encoding: FileSystem.EncodingTypes.Base64 );

然后

ref.putString(base64String,'base64',
   contentType: 'image/jpeg' )

但是,我保存到 Firestore 的图像有问题,我无法查看(直接从 Firestore 控制台或我的代码)。

我做错了什么吗?

【问题讨论】:

我从未使用过firebase,但你看过这个吗? github.com/expo/firebase-storage-upload-example 是的...我对这段代码还有其他问题,这就是我尝试使用 readAsStringAsync 的原因。见:github.com/expo/firebase-storage-upload-example/issues/14 您找到解决此问题的方法了吗?我面临着完全相同的问题。 不,我没有…… 【参考方案1】:

这里的问题是使用标准 atob 和 btob 函数的上传函数。 react-native/expo 中缺少的内容,而 expo 使用认为它正在浏览器上运行的 web js 实现。

解决方案从这里开始: React Native atob() / btoa() not working without remote JS debugging

这将添加全局 btoa、atob 函数 将它添加到 App.js 中就可以了..

import decode, encode from 'base-64'

if (!global.btoa) 
    global.btoa = encode;


if (!global.atob) 
    global.atob = decode;

【讨论】:

以上是关于从 Expo 的缓存中以 base64 格式读取文件,写入 Firebase 存储(Cloud Storage for Firebase)的主要内容,如果未能解决你的问题,请参考以下文章

如何转换数据:image / webp,expo(或php)中的base64

未处理的承诺拒绝:TypeError:网络请求失败 - 在 React Native / Expo 中将 Base64(视频/mp4)转换为 Blob

base64加密linux去除分隔符

如何使用 expo(文件系统)将视频转换为 base64

react native Expo convertir file://a base64

在 C# 中以 base64 编码的 XMLHttpRequest 调用 FastRPC