我要下载从服务器动态创建的文件,该文件是使用php中的此配置创建的
header('Content-Type: "' . $mime . '"');
header('Content-Disposition: attachment; filename="' . $title .".". $ext . '"');
header('Expires: 0');
header('Content-Length: '.$size);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
readfile($file);
我已经在React Native中尝试过类似的方法
const tmpFName = res.data.media_url.split('/').pop();
const fName = tmpFName.split('?')[0];
const resultFile = `${RNFS.TemporaryDirectoryPath}/${fName}`;
RNFS.downloadFile({
fromUrl : res.data.media_url,
toFile : resultFile,
}).promise.then(async (r) => {
CameraRoll.saveToCameraRoll(resultFile, res.data.label).then((dt) => {
this.setState({
loading : false,
loadingTitle: 'Loading Content',
isLoaded : false,
isDone : true
});
//Alert.alert("Saved");
}).catch((err) => {
this.setState({
text : '',
loading: false,
isError: true,
errorMessage: err.toString(),
errorTitle: 'Saving ' + res.data.label + ' failed'
});
});
}).catch((err) => {
this.setState({text: '',loading : false, isError: true, errorMessage : err.toString(), errorTitle: 'Download failed'});
});
但这给了我错误
错误:网址不受支持
但是,如果该URL是通过浏览器执行的,则可以正确下载文件。 有人可以帮我吗?
链接看起来像这样
http://dislh.sumutprov.go.id/iklh/my/yt/download.php?url=aHR0cHM6Ly9yMi0tLXNuLW8wbjVveHUtaHhuZS5nb29nbGV2aWRlby5jb20vdmlkZW9wbGF5YmFjaz9leHBpcmU9MTU2OTg2MTg5NiZlaT1wOXlSWFktOE9lakozTFVQLTdhZi1BTSZpcD0xMTAuMjMyLjg3LjE1NCZpZD1vLUFDQm9aTDI2QU5lNlczZEdXZDItaVNJM2hQV1R3aWVwbXFHcHMtbmRWMmxUJml0YWc9MTgmc291cmNlPXlvdXR1YmUmcmVxdWlyZXNzbD15ZXMmbW09MzElMkMyOSZtbj1zbi1vMG41b3h1LWh4bmUlMkNzbi1wb3F2bjV1LWpiMzYmbXM9YXUlMkNyZHUmbXY9bSZtdmk9MSZwbD0yNCZpbml0Y3duZGJwcz0zNzAwMDAmbWltZT12aWRlbyUyRm1wNCZnaXI9eWVzJmNsZW49OTg2ODAwNyZyYXRlYnlwYXNzPXllcyZkdXI9MjQwLjQ2NSZsbXQ9MTU2OTUzNTE5ODc2MjMxOCZtdD0xNTY5ODQwMTg1JmZ2aXA9MyZmZXhwPTIzODQyNjMwJmJlaWRzPTk0NjY1ODcmYz1XRUImdHhwPTU1MzE0MzImc3BhcmFtcz1leHBpcmUlMkNlaSUyQ2lwJTJDaWQlMkNpdGFnJTJDc291cmNlJTJDcmVxdWlyZXNzbCUyQ21pbWUlMkNnaXIlMkNjbGVuJTJDcmF0ZWJ5cGFzcyUyQ2R1ciUyQ2xtdCZzaWc9QUxneEkyd3dSUUloQUxaWFptZGdOSVJmRlBQNmlkM2tEZjkxcHFndVJZYVY2aThoenNZYW42VjZBaUJxd1ZlS0pud3k0WWh5OTJibl84SzQwTWoyb0V1Nnl3TXVkdG9PR1VHM2dRJTNEJTNEJmxzcGFyYW1zPW1tJTJDbW4lMkNtcyUyQ212JTJDbXZpJTJDcGwlMkNpbml0Y3duZGJwcyZsc2lnPUFIeWxtbDR3UmdJaEFLVjd0eGZ0ZHdDMlVab1hTRExLQkc0Y0hnRTNlaTNoVGlsY0N0NjJOd1hWQWlFQWkyTjlHQS1YZE50dFBIbjhMYVNxRjhtSjY3NlFjN21laVZrOTNHQmV3UVElM0Q=&mime=video\/mp4&title=Hindia - Dehidrasi ft. Petra Sihombing (Official Video)&ext=mp4&size=9868007
答案 0 :(得分:0)
如果您的网址是正确的地址,则可以尝试通过其他模块进行故障排除。
您可以使用react-native-fetch-blob
用法
const dirs = RNFetchBlob.fs.dirs
const resultFile = `${dirs.CacheDir}/${fName}`;
RNFetchBlob
.config({
// DCIMDir is in external storage
path : resultFile
})
.fetch('GET', res.data.media_url)
.then((response) => RNFetchBlob.fs.scanFile([ { path : response.path(), mime : 'video/mp4' } ]))
.then(() => {
// scan file success
})
.catch((err) => {
// scan file error
})