react-native-fs 플러그 인의 사용 및 만 나 는 구덩이 에 대한 자세 한 설명
설치 명령:
npm install react-native-fs --save
// : react native <0.40 , :
npm install [email protected] --save
설치 후 실행:
react-native link react-native-fs
android/app/src/main/android Manifest.xml 에 android 읽 기와 쓰기 권한 추가
<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 에 인증 정 보 를 자동 으로 추가 하고 안 드 로 이 드 는 수 동 으로 설정 해 야 합 니 다.
이 오류 해결 방법:
1.로그 인 인 인 터 페 이 스 를 호출 할 때 쿠키(cookie 는 response 에 있 음)를 저장 하고 react-native-fs 를 호출 할 때 headers 에 전송 합 니 다.코드 는 다음 과 같 습 니 다.
_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 를 호출 할 때 headers 에 넣 고 코드 는 다음 과 같 습 니 다.
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")
}
},
다음 항목 은 파일 업로드 기능 에 쓸 때 업로드 기능 을 계속 추가 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx 에서 사이트 아이콘 표시 설정전단 개발 환경: react:^16.4.1 webpack:^4.16.0 웹 팩 에 favicon. ico 설정 추가: nginx 는 ico 에 대한 지원 을 추가 합 니 다:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.