从 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