web-dev-qa-db-fra.com

React native: comment obtenir la taille du fichier, le type MIME et son extension?

Je sais que react-native-fs et react-native-fetch-blob , mais il me manque des fonctions d'aide simples telles que getFileInfo(file).

Pseudo-code souhaité:

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

Quelle est la bonne façon d'obtenir la taille du fichier, le type MIME et l'extension?

Merci d'avance!

8
Mr. B.

Pour obtenir taille du fichier en utilisant react-native-fetch-blob j'ai utilisé le code suivant

Pour cela, vous devez installer 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");
    })

Explication:

  1. Le code ci-dessus décode les données base64 en chaîne, comme atob ().
  2. Trouver ensuite la longueur de la chaîne 
  3. À partir de cette valeur, je dois calculer la taille du fichier.

Si le fichier est trop volumineux, utilisez la méthode RNFetchBlob.fs.readStream au lieu de RNFetchBlob.fs.readFile.

Je reçois le calcul des octets à partir de SO convertir taille

Le code peut être trop long pour calculer la taille du fichier. Si quelqu'un trouve le moyen le plus simple de me guider

1
Asha

Avec react-native-fetch-blob , vous pouvez obtenir la taille du fichier avec le code ci-dessous:

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

La réponse stats contient les informations suivantes:

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

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

5
mfekim

Vous pouvez obtenir des données sur le blob avec react-native-fetch-blob et utiliser react-native-mime-types pour obtenir l'extension.

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

Taille du fichier: Cette réponse convient mieux au nouveau client CRNA. Utilisez File System from Expo. 

import {FileSystem} from expo 

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