簡體   English   中英

React Native:如何獲取文件大小,MIME類型和擴展名?

[英]React native: how to get file size, mime type and extension?

我知道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類型和擴展名的正確方法是什么?

提前致謝!

使用react-native-fetch-blob ,您可以使用以下代碼獲取文件大小:

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

響應統計信息包含以下信息:

{
     // 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

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);

文件大小:此答案最適合新的CRNA客戶端。 使用Expo中的文件系統

import {FileSystem} from expo 

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

您可以使用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)
  }
)

為了使用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()的字符串。
  2. 下一步查找字符串的長度
  3. 根據該值,我必須計算文件大小。

如果文件太大,請使用RNFetchBlob.fs.readStream方法而不是RNFetchBlob.fs.readFile

我正在從SO轉換大小獲取字節計算

該代碼可能太長,無法計算文件大小。 如果有人找到最簡單的方法指導我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM