web-dev-qa-db-ja.com

React native:ファイルサイズ、MIMEタイプ、拡張子を取得する方法?

react-native-fs および react-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タイプ、拡張子を取得する適切な方法は何ですか?

前もって感謝します!

12
Mr. B.

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.readFileの代わりにRNFetchBlob.fs.readStreamメソッドを使用します

SO変換サイズ からバイト計算を取得しています

コードが長すぎてファイルサイズを計算できない可能性があります。誰もが最も簡単な方法を見つけたら私を案内してください

1
Asha

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

13
mfekim

react-native-fsstatメソッドを使用できます(ファイルサイズを取得するため)

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

...

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

ファイルサイズ:この回答は、新しいCRNAクライアントに最適です。 Expoの File System を使用します。

import {FileSystem} from expo 

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

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)
  }
)
1
GouxLord