Загрузите потоковый файл с сервера с помощью модуляact-native-fs в React Native - PullRequest
0 голосов
/ 28 сентября 2019

Я хочу скачать файл, созданный динамически с сервера, файл создается с помощью этой конфигурации в 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

1 Ответ

0 голосов
/ 29 сентября 2019

Если ваш 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
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...