2016-12-29 89 views
6

我知道react-native-fsreact-native-fetch-blob,但我缺少簡單的幫助功能,如getFileInfo(file)React native:如何獲取文件大小,MIME類型和擴展名?

期望中的僞代碼:

let fileInfo = getFileInfo('path/to/my/file.txt'); 
console.log('file size: ' + fileInfo.size); 
console.log('mime type: ' + fileInfo.type); 
console.log('extension: ' + fileInfo.extension); 

什麼是正確的方式來獲得文件大小,MIME類型和擴展?

在此先感謝!

+0

有同樣的問題,你找到任何解決方案? – dccarmo

+0

@dccarmo遺憾的是還沒有。 –

+0

@dccarmo檢查新的答案,也許它適合你。 –

回答

2

要使用反應-native-得到文件大小取二進制大對象我用下面的代碼

對於u需要安裝base-64

var base64 = require('base-64'); 
RNFetchBlob.fs.readFile(filePath, 'base64') 
    .then((data) => { 
     var decodedData = base64.decode(data); 
     var bytes=decodedData.length; 
     if(bytes < 1024) console.log(bytes + " Bytes"); 
     else if(bytes < 1048576) console.log("KB:"+(bytes/1024).toFixed(3) + " KB"); 
     else if(bytes < 1073741824) console.log("MB:"+(bytes/1048576).toFixed(2) + " MB"); 
     else console.log((bytes/1073741824).toFixed(3) + " GB"); 
    }) 

說明:

  1. 上述代碼將base64數據解碼爲像atob()這樣的字符串。
  2. 下一個找到字符串的長度
  3. 從這個值我必須計算文件的大小。

如果文件過大,使用RNFetchBlob.fs.readStream方法,而不是從RNFetchBlob.fs.readFile SO convert size

我得到字節計算的代碼可能會太長計算文件大小。如果有人發現最簡單的方式指導我

1

你可以得到的數據有關與反應原生取二進制大對象,BLOB和使用反應本地-MIME類型得到擴展

const res = yield RNFetchBlob.config({fileCache: false}).fetch('GET', url, {}) 
const blob = yield res.blob().then((blob) => { 
    mimetype.extension(blob.type) 
    } 
) 
+1

如果有人欺騙擴展名會怎麼樣?有沒有合適的方法? – vzhen

+1

@vzhen這必須在服務器端完成 – GouxLord

相關問題