react native fs 下载文件到本地(图片,视频,pdf.....) - ImVeryGood/Loan GitHub Wiki
1.首选安装react-native-fs,anroid ios 添加依赖,
npm install react-native-fs
2.封装为方法使用
export function downLoadAllFile(name, fileType, uri) {
if (!uri) return null;
let type = ImageMime.fileType(name);
console.log('name=' + name + 'type' + type + 'uri' + uri);
return new Promise((resolve, reject) => {
let dirs = Platform.OS === 'android' ? RNFS.ExternalDirectoryPath : RNFS.LibraryDirectoryPath; //外部文件,共享目录的 绝对路径(仅限android)
let downloadDest = null;
if (type === 'png' || type === 'PNG') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.png`;
} else if (type === 'jpg' || type === 'JPG') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.jpg`;
} else if (type === 'jpeg' || type === 'JPEG') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.jpeg`;
} else if (type === 'jpe' || type === 'JPE') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.jpe`;
} else if (type === 'mp4' || type === 'MP4') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mp4`;
} else if (type === 'mov' || type === 'MOV') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mov`;
} else if (type === 'movie' || type === 'MOVIE') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.movie`;
} else if (type === 'mp3' || type === 'MP3') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mp3`;
} else if (type === 'avi' || type === 'AVI') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.avi`;
} else if (type === 'mp2' || type === 'MP2') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mp2`;
} else if (type === 'mpa' || type === 'MPA') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mpa`;
} else if (type === 'mpe' || type === 'MPE') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mpe`;
} else if (type === 'mpeg' || type === 'MPEG') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mpeg`;
} else if (type === 'mpg' || type === 'MPG') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mpg`;
} else if (type === 'mpv2' || type === 'MPV2') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.mpv2`;
} else if (type === 'qt' || type === 'QT') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.qt`;
} else if (type === 'doc' || type === 'DOC') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.doc`;
} else if (type === 'pdf' || type === 'PDF') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.pdf`;
} else if (type === 'docx' || type === 'DOCX') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.docx`;
} else if (type === 'xlsx' || type === 'XLSX') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.xlsx`;
} else if (type === 'txt' || type === 'TXT') {
downloadDest = `${dirs}/${((Math.random() * 10000000) | 0)}.txt`;
}
Utils.startLoading();
const formUrl = uri;
console.log('downloadDest' + downloadDest);
const options = {
fromUrl: formUrl,
toFile: downloadDest,
background: true,
begin: (res) => {
console.log('begin', res);
console.log('contentLength:', res.contentLength / 1024 / 1024, 'M');
},
};
if (fileType === 'image' || fileType === 'video') {
try {
const ret = RNFS.downloadFile(options);
ret.promise.then(res => {
var promise = CameraRoll.saveToCameraRoll(downloadDest);
promise.then(function(result) {
Utils.dismissLoading();
Utils.promptError('下载成功');
}).catch(function(error) {
Utils.dismissLoading();
console.log('error', error);
Utils.promptError('下载失败');
});
resolve(res);
}).catch(err => {
Utils.dismissLoading();
console.log('error', err);
reject(new Error(err));
});
} catch (e) {
Utils.dismissLoading();
console.log('e' + JSON.stringify(e));
reject(new Error(e));
}
} else {
try {
const ret = RNFS.downloadFile(options);
ret.promise.then(res => {
console.log('success', res);
Utils.dismissLoading();
Utils.promptError('下载成功');
if (Platform.OS === 'android') {
scanFileAsyn(downloadDest);
}
console.log('file://' + downloadDest);
}).catch(err => {
Utils.dismissLoading();
console.log('err', err);
});
} catch (e) {
Utils.dismissLoading();
console.log(e);
}
}
}); }