如何在React Native中将base64转换为Blob?

wag*_*gng 11 javascript react-native

我将把b64转换为blob in react native.

但我在atob功能上遇到错误.

这是我的代码.

var binary = atob(this.state.avatarSource.uri.split(',')[1]);
var byteNumbers = new Array(binary.length);

for(var i = 0; i < binary.length; i++) {
  byteNumbers.push(binary.charCodeAt(i));
}
var file = new Blob([new Uint8Array(byteNumbers)], {type: 'image/jpeg'});
Run Code Online (Sandbox Code Playgroud)

有人有什么想法吗?

小智 7

不要使用atobbtoa仅适用于Debug Mode.

因为当您使用调试模式时,您在浏览器中运行JS代码(应该是V8),而如果您要在生产模式下运行应用程序,则使用JavascriptCore没有atobbtoa实现的应用程序.

您可以使用base-64将数据转换为BASE64编码的字符串,但我不确定它是否可以为您创建正确的Blob对象.

根据我的理解,Blob是JS上下文和文件系统之间的桥梁,React Native本身还没有文件系统API,因此你可能得到一个Blob对象,但它总是空的.

如果你要从包含数字的数组创建一个图像,你可以看看react-native-fetch-blob这是我正在研究的项目,希望它可以解决这类问题:)

  • react-native-fetch-blob是否提供Blob?我目前正在使用“反应本机图像选择器”,它提供URI和base64。我需要将其转换为blob。请提供建议。 (2认同)
  • 2021 这里和react-native-fetch-blob,以及它进一步链接到的存储库,都没有维护......必须有一种方法可以在 2021 年将 base64 转换为 blob,对吧? (2认同)

小智 5

遇到这种情况:Android 上的 fetch() 无法使用数据 URI。相反,请尝试以下操作:

import { Buffer } from "buffer";


const base64 = 'iVBORw0KGgoAAAANSUhEU ....'
const buffer = Buffer.from(base64, "base64");

const blob = new Blob([buffer], { type: '[content-type]' })
Run Code Online (Sandbox Code Playgroud)

如果 base64 是 PNG 文件,则此处的内容类型将为“image/png”。


Jag*_*yay -1

我正在获取图像的基数 64。之后我从下面的代码中显示它。希望它可以帮助你

let imgSrc = "data:image/png;base64," + base64ImageData;
<Image source={{uri: imgSrc, scale: 1}} style={{ height: 80, width: 80}}/>
Run Code Online (Sandbox Code Playgroud)