>  기사  >  웹 프론트엔드  >  React-native-fs 플러그인 사용 사례에 대한 자세한 설명

React-native-fs 플러그인 사용 사례에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-04-18 09:09:352255검색

이번에는 React-native-fs 플러그인 사용 사례에 대한 자세한 설명을 가져왔습니다. React-native-fs 플러그인 사용 시 주의사항은 무엇인가요? 봐.

react-native-fs 플러그인은 파일 업로드 및 다운로드 시 사용되며, iOS와 안드로이드 모두에서 사용할 수 있으며, 파일 업로드(iOS만 해당).

설치 명령:

npm install react-native-fs --save
//注意:如果react native版本是<0.40安装,使用此标签:
npm install react-native-fs@2.0.1-rc.2 --save

설치 후 다음을 실행하세요:

react-native link react-native-fs

android/app/src/main/AndroidManifest.xml에서 안드로이드가 파일을 읽고 쓸 수 있는 권한을 추가하세요

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

위의 설치 작업을 완료한 후 이 플러그인의 다양한 방법을 사용할 수 있습니다. 각 방법의 구체적인 사용 예는 https://github.com/itinance/react-native-fs 링크를 참조하세요. 프로젝트에서는 이미지 파일을 다운로드하고 로컬에 다운로드한 후 이미지 경로를 얻은 다음 이미지를 표시해야 합니다. 따라서 downloadFile 메소드를 사용하십시오. 호출 가능한 서비스를 캡슐화하며 코드는 다음과 같습니다.

downloadFile(imageId, cookie, callback) {
    const downloadDest = `${RNFS.DocumentDirectoryPath}/${((Math.random() * 1000) | 0)}.jpg`;
    var formUrl = CommonSvc.baseURL + '/api/image/0/' + imageId;
    //var formUrl = 'http://lorempixel.com/400/200/';
    const options = {
      fromUrl: formUrl,
      toFile: downloadDest,
      background: true,
      headers: {
        'Cookie': cookie //需要添加验证到接口要设置cookie
      },
      begin: (res) => {
        //console.log(res);
      },
      progress: (res) => {
        //console.log(res);
      }
    };
    try {
      const ret = RNFS.downloadFile(options);
      ret.promise.then(res => {
        //callback(null, Platform.OS === 'android' ? downloadDest : 'file://' + downloadDest)
        callback(null, 'file://' + downloadDest)
 
      }).catch(err => {
        callback(err)
      });
    }
    catch (e) {
      callback("error")
    }
 
  },

이 기능을 구현할 때 안드로이드에서 로컬로 다운로드한 사진이 표시되지 않는 이유는 안드로이드가 이 플러그인을 호출할 때 인터페이스 확인 정보를 추가해야 하기 때문입니다. 확인), 문제 해결 방법

React-native-fs 플러그인 호출 시 데이터 인터페이스에 검증 정보가 필요한 경우 안드로이드에서는 오류가 발생하지만, iOS에서는 문제가 발생하지 않습니다. 그 이유는 인터페이스에 검증 정보가 있지만 이 플러그인 호출 시 전달되지 않기 때문입니다. iOS에서는 검증 정보가 자동으로 추가되지만 Android에서는 수동으로 설정해야 합니다.

이 오류에 대한 해결 방법:

1. 로그인 인터페이스를 호출할 때 쿠키를 저장하고(쿠키는 응답에 있음) React-native-fs를 호출할 때 헤더에 넣습니다. 코드는 다음과 같습니다.

_appLogin(userName, password, callback){
 
    fetch(commonSvc.baseURL + '/account/app-login', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        UserName: userName,
        Password: password
      })
    }).then(
      (response) => {
        if (response.ok) {
          return response;
        } else {
          var message;
          switch (response.status) {
            case 710:
              message = LanguageChooseSvc.strings['api_common_' + 710];
              break;
            case 711:
              message = LanguageChooseSvc.strings['api_common_' + 711];
              break;
            case 400:
              message = LanguageChooseSvc.strings['api_common_' + 400];
              break;
            default:
              message = commonSvc.httpErrorMessage;
              break;
          }
          throw {message: message};
        }
      }
    ).then(
      (responseJson) => {
        callback(null, responseJson);
      }
    ).catch(
      (error) => {
        callback(error.message);
      }
    );
  },

2. React-native-fs를 호출할 때 헤더에 전달하세요. 코드는 다음과 같습니다.

 downloadFile(imageId, cookie, callback) {
    const downloadDest = `${RNFS.DocumentDirectoryPath}/${((Math.random() * 1000) | 0)}.jpg`;
    var formUrl = CommonSvc.baseURL + '/api/image/0/' + imageId;
    //var formUrl = 'http://lorempixel.com/400/200/';
    const options = {
      fromUrl: formUrl,
      toFile: downloadDest,
      background: true,
      headers: {
        'Cookie': cookie //需要添加验证到接口要设置cookie
      },
      begin: (res) => {
        //console.log(res);
      },
      progress: (res) => {
        //console.log(res);
      }
    };
    try {
      const ret = RNFS.downloadFile(options);
      ret.promise.then(res => {
        //callback(null, Platform.OS === 'android' ? downloadDest : 'file://' + downloadDest)
        callback(null, 'file://' + downloadDest)
 
      }).catch(err => {
        callback(err)
      });
    }
    catch (e) {
      callback("error")
    }
 
  },

이 글의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. PHP 중국어 웹사이트에 관련 기사가 있습니다!

추천 자료:

js는 글자 수 제한을 구현합니다. 한자 = 2자

js를 사용하여 자동차 대시보드 구현

위 내용은 React-native-fs 플러그인 사용 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.