React Native:如何从远程加载二进制文件?

时间:2016-05-25 19:57:59

标签: javascript react-native

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

我正在寻找类似的东西:

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

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

更新

有些人指向" response.blob()",但此方法未在react-native中实现。

  

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

2 个答案:

答案 0 :(得分:2)

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

使用库react-native-fs,可以下载二进制文件并将二进制文件存储在磁盘存储上,音频文件可以与react-native-sound一起播放,例如视频文件可以与{{{ 3}}

示例代码:

  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;
  });

答案 1 :(得分:-1)

我花了一些时间调查这个。我确定还有更多要知道但我会从https://developer.mozilla.org/en-US/docs/Web/API/Blobhttps://developer.mozilla.org/en-US/docs/Web/API/Body/blob

开始

这是一个有效的RN代码段。

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);
  });
}