React Native中如何将Blob读取为ArrayBuffer?
React Native中Blob转ArrayBuffer的替代方案
React Native内置的FileReader确实未实现readAsArrayBuffer()方法,以下是几种可行的解决办法:
方法1:直接从Base64生成ArrayBuffer(推荐)
既然你已经持有Base64字符串,无需先转成Blob再转换,直接将Base64转为ArrayBuffer即可,省去中间冗余步骤:
const b64ToArrayBuffer = (b64Data) => { const byteCharacters = atob(b64Data); const byteArray = new Uint8Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteArray[i] = byteCharacters.charCodeAt(i); } return byteArray.buffer; }; // 使用示例 const arrayBuffer = b64ToArrayBuffer(yourBase64String); const msgReader = new Utils.MsgToHmtl.MSGReader(arrayBuffer); const fileData = msgReader.getFileData(); console.log(fileData);
方法2:使用react-native-blob-util库
这个第三方库提供了完整的Blob操作支持,可实现Blob与ArrayBuffer的转换:
- 安装依赖:
npm install react-native-blob-util # 或 yarn add react-native-blob-util
- 转换代码示例:
import ReactNativeBlobUtil from 'react-native-blob-util'; // 基于你已有的blob对象进行转换 ReactNativeBlobUtil.blobToBase64(blob) .then(base64 => { const arrayBuffer = b64ToArrayBuffer(base64); const msgReader = new Utils.MsgToHmtl.MSGReader(arrayBuffer); const fileData = msgReader.getFileData(); console.log(fileData); }) .catch(error => console.error(error));
方法3:通过react-native-fs读取本地文件(若文件存储在本地)
如果目标文件是本地存储的文件,可借助react-native-fs读取为Base64后再转成ArrayBuffer:
import RNFS from 'react-native-fs'; RNFS.readFile(filePath, 'base64') .then(base64 => { const arrayBuffer = b64ToArrayBuffer(base64); const msgReader = new Utils.MsgToHmtl.MSGReader(arrayBuffer); const fileData = msgReader.getFileData(); console.log(fileData); }) .catch(error => console.error(error));
内容的提问来源于stack exchange,提问作者Vishwajeet Gade
相关产品推荐
相关产品推荐

