2016-12-29 539 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

相关问题