react-native-fs插件的使用以及遇到的坑


react-native-fs插件是文件對上傳和下載時使用的,iOS和android都可使用,File upload (iOS only)。

安裝命令:

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,里添加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")
        }

    },

  

在實現這個功能到時候,android下載到本地的圖片顯示不出來,這個查閱了相關資料后,原因是android調用此插件,需要添加接口驗證信息(如果接口是需要驗證的情況下),這個問題我在另外一篇文章有講到,詳情可看鏈接:http://www.cnblogs.com/xiaojun-zxj/p/7048056.html

 

接下來項目寫到上傳文件的功能時,繼續補充上傳功能...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM