一伐蒋、安裝依賴
- install
npm install react-native-fs --save
- link
react-native link react-native-fs
如果link失敗工三,或者link之后仍舊不能import迁酸,則考慮手動link,詳情查看官網(wǎng)教程俭正,傳送門奸鬓。(溫馨提示:新install依賴之后,記得重啟一下app——react-native run-ios //Android react-native run-android
)
二掸读、使用例子
1. 獲得文件夾路徑
import RNFS from 'react-native-fs';
//打印出常用路徑
printPaths = () => {
console.log('MainBundlePath=' + RNFS.MainBundlePath)
console.log('CachesDirectoryPath=' + RNFS.CachesDirectoryPath)
console.log('DocumentDirectoryPath=' + RNFS.DocumentDirectoryPath)
console.log('TemporaryDirectoryPath=' + RNFS.TemporaryDirectoryPath)
console.log('LibraryDirectoryPath=' + RNFS.LibraryDirectoryPath)
console.log('ExternalDirectoryPath=' + RNFS.ExternalDirectoryPath)
console.log('ExternalStorageDirectoryPath=' + RNFS.ExternalStorageDirectoryPath)
//打印日志---ios
// MainBundlePath=/var/containers/Bundle/Application/9115F4F8-B2F6-4594-B2FC-9FF173946670/DvaStarter.app
// CachesDirectoryPath=/var/mobile/Containers/Data/Application/558EF9E2-31DA-46FF-925F-160BB4D1EF35/Library/Caches
// DocumentDirectoryPath=/var/mobile/Containers/Data/Application/558EF9E2-31DA-46FF-925F-160BB4D1EF35/Documents
// TemporaryDirectoryPath=/private/var/mobile/Containers/Data/Application/558EF9E2-31DA-46FF-925F-160BB4D1EF35/tmp/
// LibraryDirectoryPath=/var/mobile/Containers/Data/Application/558EF9E2-31DA-46FF-925F-160BB4D1EF35/Library
// ExternalDirectoryPath=null
// ExternalStorageDirectoryPath=null
}
這里可以簡單了解一下ios的沙盒模型串远。
1、Documents 目錄:您應(yīng)該將所有的應(yīng)用程序數(shù)據(jù)文件寫入到這個目錄下儿惫。這個目錄用于存儲用戶數(shù)據(jù)澡罚。該路徑可通過配置實現(xiàn)iTunes共享文件∩銮耄可被iTunes備份留搔。
2、AppName.app 目錄:這是應(yīng)用程序的程序包目錄铛铁,包含應(yīng)用程序的本身隔显。由于應(yīng)用程序必須經(jīng)過簽名,所以您在運行時不能對這個目錄中的內(nèi)容進行修改饵逐,否則可能會使應(yīng)用程序無法啟動括眠。
3、Library 目錄:這個目錄下有兩個子目錄:
3.1 Preferences 目錄:包含應(yīng)用程序的偏好設(shè)置文件倍权。您不應(yīng)該直接創(chuàng)建偏好設(shè)置文件掷豺,而是應(yīng)該使用NSUserDefaults類來取得和設(shè)置應(yīng)用程序的偏好.
3.2 Caches 目錄:用于存放應(yīng)用程序?qū)S玫闹С治募4鎽?yīng)用程序再次啟動過程中需要的信息账锹。
可創(chuàng)建子文件夾萌业。可以用來放置您希望被備份但不希望被用戶看到的數(shù)據(jù)奸柬。該路徑下的文件夾,除Caches以外婴程,都會被iTunes備份廓奕。
4、tmp 目錄:這個目錄用于存放臨時文件档叔,保存應(yīng)用程序再次啟動過程中不需要的信息桌粉。該路徑下的文件不會被iTunes備份。
2. 文件下載RNFS.downloadFile
react-native-fs
提供了下載文件的方法衙四。
downloadFile(options: DownloadFileOptions): { jobId: number, promise: Promise<DownloadResult> }
方法解析:
需要一個參數(shù)options铃肯,格式如下:
type DownloadFileOptions = {
fromUrl: string; //下載的地址源(即下載鏈接)
toFile: string; // 本地的存儲路徑(路徑包括文件名)
headers?: Headers; // 需要傳遞給服務(wù)器的報頭(根據(jù)服務(wù)器的需要傳,一般不用)
background?: boolean; // 是否允許在后臺下載(僅適用于iOS)
discretionary?: boolean; // 是否允許手機操作系統(tǒng)控制下載 (僅適用于iOS)
progressDivider?: number;//進度回調(diào)函數(shù)調(diào)用的頻率(假設(shè)設(shè)置為5传蹈,則每完成5%押逼,就會回調(diào)一次progress函數(shù)步藕。默認為0,回調(diào)頻率很高挑格,會影響性能)
begin?: (res: DownloadBeginCallbackResult) => void;//開始下載時的回調(diào)函數(shù)
progress?: (res: DownloadProgressCallbackResult) => void;//下載過程中的回調(diào)函數(shù)(與屬性progressDivider搭配使用)
resumable?: () => void; // 是否允許繼續(xù)繼續(xù)下載(僅適用于iOS)
connectionTimeout?: number // 連接超時時間(僅適用于Android)
readTimeout?: number // 讀取數(shù)據(jù)超時時間(適用于Android and iOS)
};
該方法返回一個對象咙冗,屬性jobId
為任務(wù)id,為number類型漂彤,用于暫停下載和繼續(xù)下載雾消。屬性promise
是一個Promise對象,可用來判斷下載是否完成挫望,進而執(zhí)行下載完成后的一些操作立润。
//設(shè)置下載參數(shù)
const options = {
fromUrl: videoUrl,
toFile: toFile,
background: true,
progressDivider: 5,
begin: (res) => {
//開始下載時回調(diào)
console.log('begin', res);
},
progress: (res) => {
//下載過程中回調(diào),根據(jù)options中設(shè)置progressDivider:5媳板,則在完成5%桑腮,10%,15%拷肌,...到旦,100%時分別回調(diào)一次,共回調(diào)20次巨缘。
console.log('progress', res)
}
}
const ret = RNFS.downloadFile(options);//調(diào)用downloadFile開始下載
console.log(ret.jobId); //打印一下看看jobId
ret.promise.then(res => {
//下載完成時執(zhí)行
console.log(res)
}
.catch(err => {
//下載出錯時執(zhí)行
console.log(err)
}
未完待續(xù)添忘。。若锁。