1

为了下载资产,需要在将react-native-fs与 React Native 一起使用时设置 Authorization 标头。

在文档之后,标题设置如下:

  const options = {
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
    fromUrl: url,
    toFile: path,
  };

  // const permission = await insurePermissions();

  const task = RNFS.downloadFile(options);

它在 iOS 中完美运行,但在 Android 中,使用运行 Android 6、8、9 或 10 的模拟器,没有发送标头,因此服务器返回另一个错误资产,因为用户没有经过身份验证。

如何在 Android 中使用 react-native-fs 设置 Authentication 标头?

4

1 回答 1

1

这个问题与其他 React Native 文件系统库是一致的。我改为使用 Axios 下载文件并使用 RNFS 保存。

const fetchFile = async (accessToken, id) => {
  const dir = await getDirectory();
  await flushFileProofs();
  const baseUrl = 'https://example.com';
  const url = `${baseUrl}/images/${id}/download`;
  const fileName = `${id}-file.png`;
  const path = `${dir}/${fileName}`;

  const data = await axios.request({
    method: 'GET',
    url,
    headers: {
      Accept: '*/*',
      Authorization: `Bearer ${accessToken}`,
    },
    responseType: 'arraybuffer',
  })
    .then(response => Buffer.from(response.data, 'binary').toString('base64'));

  await RNFS.writeFile(path, data, 'base64');
  FileViewer.open(path);
};
于 2019-11-12T23:59:02.683 回答