【问题标题】:React Native create blob from arbitrary dataReact Native 从任意数据创建 blob
【发布时间】:2019-12-10 08:22:45
【问题描述】:

我有一个 React Native (0.59) 应用程序,它使用一个(Swagger 生成的)SDK,该 SDK 接受 Blob 对象进行文件上传。虽然有从远程资源创建 blob 的资源(例如使用 fetch),但我找不到任何关于动态创建 blob 的资源。例如,我有一个字符串(常规 JS 字符串),我需要将该字符串作为文本文件上传到服务器。我还需要上传文件系统中的其他文件引用。

如何从 React Native 中的任意类型的任意数据创建 Blob?

【问题讨论】:

    标签: javascript react-native blob


    【解决方案1】:

    你试过 react-native 中的 rn-fetch-blob 包吗?我使用这个包通过firebase上传图片如下,它可能会对你有所帮助。

    import { firebase } from '../config';
    import { Platform } from 'react-native';
    import RNFetchBlob from 'react-native-fetch-blob';
    
    const Blob = RNFetchBlob.polyfill.Blob;
    const fs = RNFetchBlob.fs;
    
    window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
    window.Blob = Blob;
    
    export const uploadImage = (uri, mime, uid) => {
      return new Promise((resolve, reject) => {
        const uploadUri = Platform.OS === 'ios' ? uri.replace('file://', '') : uri;
    
        let uploadBlob = null;
    
        const imageRef = firebase
          .storage()
          .ref('profileImg')
          .child(uid);
        fs.readFile(uploadUri, 'base64')
          .then(data => {
            return Blob.build(data, { type: `${mime};BASE64` });
          })
          .then(blob => {
            uploadBlob = blob;
            return imageRef.put(uploadUri, { contentType: mime });
          })
          .then(() => {
            uploadBlob.close();
            return imageRef.getDownloadURL();
          })
          .then(url => {
            resolve(url);
          })
          .catch(error => {
            reject(error);
          });
      });
    };
    

    【讨论】:

    • 你使用的是什么 React Native 和 RNFetchBlob 版本?我的方法中没有名为 Blob.build 的方法。 Blob 方法是 closegetRNFetchBlobRefmarkAsDerivedonCreatedreadBlobslice
    • @CanPoyrazoğlu 这是旧的,我可以看看你的代码吗?实际上,您可以使用适当的内容类型将图像作为 base64 发送到您的服务器,或者您可以使用 this package 从图库中选择图像并获取 base64,然后将发布请求与数据一起发送到您的服务器。
    • 我正在使用一个接受Blob 的外部库(由我合作的公司内部创建),因此很遗憾,这些选项是不可能的。
    • 哦,经过进一步调查,我发现Blob.build 确实存在,只是 IntelliSense 没有意识到这一点。它突出显示了我的代码抱怨 Blob.build 不存在,但它在运行时有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2018-11-24
    • 2020-07-08
    • 2020-05-24
    相关资源
    最近更新 更多