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!
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:
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
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
}
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)
}
)
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;
};