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);
  }
}

}); }