在 React Native Expo 中将 Blob 保存到文件系统

sgu*_*uha 2 javascript react-native expo

我正在尝试下载 PDF 并通过“expo-sharing”SDK 共享它。我无法使用FileSystem.createDownloadResumable,因为该文档可通过 POST 请求获得。

sgu*_*uha 14

将其下载为 ablob并用于FileReader将其转换为要传递到的 Base64 字符串FileSystem.writeAsStringAsync

const response = await axios.post(URL_PDF_CONTENT, { Benefits: payload }, { responseType: 'blob' });

const fr = new FileReader();
fr.onload = async () => {
  const fileUri = `${FileSystem.documentDirectory}/pdf.pdf`;
  await FileSystem.writeAsStringAsync(fileUri, fr.result.split(',')[1], { encoding: FileSystem.EncodingType.Base64 });
  Sharing.shareAsync(fileUri);
};
fr.readAsDataURL(response.data);
Run Code Online (Sandbox Code Playgroud)

  • 经过大约 6 小时的反复试验,可以确认这是当前适用于通过 POST 方法获取 PDF 的 Expo 管理项目的唯一解决方案。Fetch 不起作用,FileSystem asyncDownload 仅支持 GET 请求(不支持 POST),并且 rn-fetch-blob 与 Expo 不兼容。谢谢你! (2认同)