rn-fetch-blob POST下载Flask返回PDF时请求被识别为GET如何解决
问题根因
你出现这个问题的核心原因是启用了Android系统的DownloadManager来处理下载:useDownloadManager: true。Android原生DownloadManager本身仅支持GET请求,当你开启这个配置后,RNFetchBlob会自动将你指定的POST请求转为GET请求发送,所以Flask端会收到GET请求,返回405方法不允许错误。
解决方案
方案1:保留使用系统DownloadManager
如果需要依赖系统DownloadManager的通知、下载管理能力,你需要调整前后端逻辑适配GET请求:
- 后端Flask接口修改为允许GET请求,原本放在POST body里的参数改为通过URL查询参数传递
- 前端请求改为GET类型,参数拼接在请求URL后
方案2:保留POST请求逻辑
如果接口必须使用POST请求传递参数,关闭DownloadManager配置即可,下载完成后如果需要让文件在系统下载目录中可见,可手动将下载的文件移动到Android公共下载路径,示例代码如下:
import { Platform } from 'react-native'; RNFetchBlob .config({ fileCache: true, // 可选指定下载文件后缀 appendExt : 'pdf' }) .fetch('POST', 'http://192.168.0.199:8000/v1/quote/view', data) .then((res) => { // 安卓端移动到公共下载目录方便用户查看 if (Platform.OS === 'android') { const destPath = `${RNFetchBlob.fs.dirs.DownloadDir}/自定义文件名.pdf` return RNFetchBlob.fs.mv(res.path(), destPath) } return res.path() }) .then(finalPath => console.log('文件已保存到 ', finalPath)) .catch((err)=>console.log(err));
注意:如果使用方案2手动移动文件到公共目录,需要提前申请安卓的存储读写权限,否则会出现文件操作失败的问题。
内容的提问来源于stack exchange,提问作者Farooq sheikh
相关产品推荐
相关产品推荐

