【问题标题】:React Native: how to load binary file from remote?React Native:如何从远程加载二进制文件?
【发布时间】:2016-05-25 19:57:59
【问题描述】:

我想从远程存储中获取音频文件。如何使用“fetch”方法的响应结果来处理二进制数据?我想用 react-native-fs 将它们保存在本地文件系统中。但我无法找到方法“fetch”的返回值的文档来访问二进制 blob。 我试图 console.log 获取的响应,但是对于二进制数据,xcode 挂起然后不负责任

我正在寻找这样的东西:

    fetch(mediaUrl).then( (response) => {
        let blob = response.getBinaryData()
    })

(getBinaryData 不是一个有效的方法。这正是我的问题:如何获取二进制数据?)

更新

有些人指向“response.blob()”,但是这个方法在react-native中没有实现。

"response.blob 不是函数。(在'response.blob()'中, 'response.blob' 未定义)"

【问题讨论】:

    标签: javascript react-native


    【解决方案1】:

    差不多一年半前我已经完全忘记了自己的这个(过时的)问题,最终将提供一个合适的答案:

    使用库react-native-fs可以下载二进制文件并将它们二进制存储在磁盘存储中,音频文件可以用react-native-sound播放,视频文件可以用react-native-video播放。

    示例代码:

      const downloadOptions = {
        fromUrl: imageUrl,
        toFile: filename
      }
      return yield RNFS.downloadFile(downloadOptions).promise.then( (res) => {
        if(res.statusCode == 200) {
          return true;
        }
        else {
          console.log("Download failed", res);
          return false;
        }
    
      })
      .catch((err) => {
        console.log('DownloadFile Error', err);
        return false;
      });
    

    【讨论】:

    • 这很好,除非您必须从 S3 获取它,或者您从其他无法使用 downloadFile 的地方获取它。
    【解决方案2】:

    我花了一些时间调查这个问题。我相信还有更多要了解的,但我会从 https://developer.mozilla.org/en-US/docs/Web/API/Blobhttps://developer.mozilla.org/en-US/docs/Web/API/Body/blob 开始

    这是一个有效的 RN 代码 sn-p。

    url = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';
    opts = {}
    return fetch(url, opts)
      .then(response => response.blob())
      .then(blob => {
        console.log('blob', blob);
        let reader = new FileReader();
        reader.addEventListener("loadend", function() {
          console.log(reader.result);
        });
        reader.readAsDataURL(blob);
      });
    }
    

    【讨论】:

    • 在 react-native 中,blob() 没有作为函数实现:“response.blob 不是函数。(在 'response.blob()' 中,'response.blob' 未定义) "
    • @itinance 将图像保存为base64asciiutf-8 编码。任何想法如何在本地文件系统中直接将其保存为.png
    • @Stophface 请看看我自己的答案:stackoverflow.com/a/46443715/1397160
    猜你喜欢
    • 2015-12-15
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2017-12-11
    相关资源
    最近更新 更多