【问题标题】:Upload to Firebase Storage from React Native从 React Native 上传到 Firebase 存储
【发布时间】:2017-01-10 00:00:43
【问题描述】:

我看到很多关于从 React Native 上传到 Firebase 存储的讨论,但似乎都是如何解决 React Native 不支持 Blob 或文件的事实。但是 Firebase 有一个 putString 方法来上传 base64 编码的文件。

为什么这段代码可以在浏览器中工作,但不能在 React Native 中工作:

var base64String = "iVBORw0KGgoAAAA...";
firebase
  .storage()
  .ref()
  .child(`test/test.png`)
  .putString(base64String, 'base64')
  .then(function(snapshot) {
    console.log('Uploaded a base64 string!');
  })
  .catch(function(err) {
    console.log('Problems', err);
  });

在 React Native 中没有给出错误,但没有文件到达 Firebase。是什么赋予了?

【问题讨论】:

  • 鉴于putString()是thennable,它可能还定义了一个catch(),当有错误时调用:.putString(base64String, 'base64') .then(function(snapshot) { console.log('Uploaded a base64 string!'); }).catch(function(error) { console.error(error); });
  • 是的。试过了。似乎没有抛出任何错误。
  • 不过,这是一个很好的观点。我在示例中添加了一个问题。即使使用它,控制台也不会记录任何内容。
  • 我认为这类似于this question
  • 感谢 Xeijp。这正是我的问题,是的。但同样,唯一的答案似乎是扩展 React Native 以使用 Blob,并且没有回答为什么 putString 方法(不应该需要 blob)失败的问题。

标签: javascript firebase react-native firebase-storage


【解决方案1】:

此处为 Firebase 存储 JS 开发人员。

需要明确的是,在撰写本文时(2016 年 9 月 2 日)React Native 不支持 Firebase 存储上传。

回答你关于为什么上传在浏览器中工作而不是 React Native 的问题:我们的 putString() 方法不需要 Blob 支持,但如果你传入一个 base64 字符串,我们的库仍然有能够以某种方式发送二进制数据。

在现代浏览器中,您可以将二进制数据存储在 ArrayBuffer 中并将其作为 XMLHttpRequest 或 Fetch 请求的主体发送 - 在 React Native 中并非如此。

据我们所知,React Native 核心库目前不提供一种将内存中二进制数据作为 HTTP 请求正文发送的好方法。

【讨论】:

  • 当使用github.com/wkh237/react-native-fetch-blob 和像window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest 那样填充 XMLHTTPRequest 时,这是否也适用?编辑:上下文:github.com/wkh237/rn-firebase-storage-upload-sample/blob/master/…
  • react-native-fetch-blob 是第三方库,所以我们不官方支持。从我的观察来看,看起来有些人在 react-native-fetch-blob 上取得了成功(所以我们尽量不破坏它),但是新的 Firebase 版本已经暴露了一些错误,例如 github.com/wkh237/react-native-fetch-blob/pull/194。由于我们不发布/控制 react-native-fetch-blob,因此我们无法保证对涉及它的支持请求、错误报告等提供相同级别的响应。
  • @sphippen 你知道 React Native 何时支持此功能的问题或跟踪方法吗?
猜你喜欢
  • 2020-03-06
  • 2020-03-23
  • 2020-08-31
  • 2016-11-20
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2018-01-14
相关资源
最近更新 更多