【问题标题】:Downloading a binary file with POST method in React Native在 React Native 中使用 POST 方法下载二进制文件
【发布时间】:2017-12-27 07:20:27
【问题描述】:

我在前端使用 React-native,在我的服务器上使用 PHP 后端。我需要能够将密码发送到要从中下载文件的服务器。如果密码正确,我正在连接到使用 X-SendFile 库将文件发回的 PHP 脚本。

目前我正在使用 RNFS.downloadFile() 下载和保存文件,但这似乎只适用于 GET 而不适用于 POST。我希望能够将文件保存到 DocumentDirectoryPath。

我当前的代码如下所示:

await RNFS.downloadFile({
    fromUrl: 'http://example.com/myfile.zip',
    toFile: RNFS.DocumentDirectoryPath + "/userdata/myfile.zip",
}).promise

我希望能够做这样的事情:

await RNFS.downloadFile({
    method: post,
    body: {passcode: "abc123", filename: "myfile.zip"},
    fromUrl: 'http://example.com/getfile.php',
    toFile: RNFS.DocumentDirectoryPath + "/userdata/myfile.zip",
}).promise

如何更改我的代码以将密码作为 POST 参数传递?

【问题讨论】:

标签: post react-native x-sendfile


【解决方案1】:

从以下文件的第 58 行到第 70 行可以看出,react-native-fs 不支持您要实现的目标。

FS.common.js @ react-native-fs github page

但是,还有其他库可以帮助您。 react-native-fetch-blob 支持您尝试以下列格式实现的目标;

RNFetchBlob
.config({
  path : RNFetchBlob.fs.DocumentDir + '/userdata/myfile.zip'
})
.fetch(
  'POST',
  'http://example.com/myfile.zip',
  {
    //headers...
  },
  JSON.stringify({
    //request body...
    passcode: "abc123",
    filename: "myfile.zip"
  }),
)
.then((res) => {
  console.log('The file saved to ', res.path())
})

虽然它应该以这种方式工作,但我建议您在尝试下载文件和使用 GET 请求时不要诉诸于此并使用身份验证模式进行身份验证,例如 HTTP 基本身份验证和查询字符串/标题以获取其他数据。

【讨论】:

  • 谢谢。每个文件都有自己的密码与之关联。密码存储在数据库的文件表中。对于这种情况,你还会推荐 HTTP Basic Auth 吗?
  • 是的。您可以处理数据以满足您的需求。
  • 由于某种原因,除非我在请求正文部分使用 JSON.stringify,否则这不起作用。我得到的错误是“TypeError: expected dynamic type 'string', but has type 'object' (constructing arguments for RNFetchBlob.fetchBlob at argument index 5). 我也不确定为什么说它是参数索引 5 fetch 函数中有 4 个参数。一旦我 JSON.stringify 它,它似乎可以工作,但是,我现在得到一个 0 字节的文件。所以不知道为什么我没有收到错误。另外,URL 应该有是一个 PHP 地址。
  • 请看我最近关于这个 0 字节文件的问题。
  • 不幸的是 react-native-fetch-blob 被迁移到 rn-fetch-blob 并且后来声明它不再维护 - link
猜你喜欢
  • 2017-08-15
  • 2018-12-10
  • 1970-01-01
  • 2013-08-30
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多