0

我想下载从服务器动态创建的文件,该文件是在 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);

我已经尝试过类似这样的反应原生

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

但如果通过浏览器执行 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

4

1 回答 1

0

如果你的 url 是正确的地址,你可以尝试通过其他模块进行故障排除。

您可以使用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
    })
于 2019-09-29T06:33:38.737 回答