React Native:如何获得文件大小,MIME类型和扩展名?

to94eoyn  于 2023-02-09  发布在  React
关注(0)|答案(5)|浏览(323)

我知道react-native-fsreact-native-fetch-blob,但我缺少像getFileInfo(file)这样的简单帮助函数。

    • 所需伪代码:**
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类型和扩展名?
先谢了!

nwlqm0z1

nwlqm0z11#

使用react-native-fetch-blob,您可以通过以下代码获得文件大小:

RNFetchBlob.fs.stat(PATH_OF_THE_TARGET)
.then((stats) => {})
.catch((err) => {})

响应stats包含以下信息:

{
     // file name
     filename : 'foo.png',
     // folder of the file or the folder itself
     path : '/path/to/the/file/without/file/name/',
     // size, in bytes
     size : 4901,
     // `file` or `directory`
     type : 'file',
     // last modified timestamp
     lastModified : 141323298
}

图片来源:https://github.com/wkh237/react-native-fetch-blob/wiki/File-System-Access-API#user-content-statpathstringpromisernfetchblobstat

u91tlkcl

u91tlkcl2#

react-native-fs中,可以使用stat方法(获取文件大小)

import { stat } from 'react-native-fs';

...

const statResult = await stat('path/to/my/file.txt');
console.log('file size: ' + statResult.size);
x7yiwoj4

x7yiwoj43#

**文件大小:**此答案最适合新的CRNA客户端。请使用Expo中的File System

// import {FileSystem} from expo // Original Post
import * as FileSystem from 'expo-file-system' // Updated based on docs

getFileSize = async fileUri => {
   let fileInfo = await FileSystem.getInfoAsync(fileUri);
   return fileInfo.size;
 };
xggvc2p6

xggvc2p64#

您可以使用react-native-fetch-blob获取有关blob的数据,并使用react-native-mime-types获取扩展名

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

r3i60tvu5#

要使用react-native-fetch-blob获取文件大小,我使用了以下代码。

    • 它只适用于小文件。如果您有大文件,请尝试下面的其他答案**

为此,您需要安装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()的字符串。
1.下一个查找字符串长度
1.从这个值我必须计算文件大小。
如果文件太大,请使用RNFetchBlob. fs. readStream方法,而不是RNFetchBlob. fs. readFile
我正在从SO convert size获取字节计算
代码可能太长,无法计算文件大小。如果有人发现最简单的方法指导我

相关问题