【问题标题】:React native: how to get file size, mime type and extension?React Native:如何获取文件大小、mime 类型和扩展名?
【发布时间】:2017-05-13 07:59:43
【问题描述】:

我知道 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 类型和扩展名的正确方法是什么?

提前致谢!

【问题讨论】:

  • 遇到同样的问题,你找到解决办法了吗?
  • @dccarmo 不幸的是还没有。
  • @dccarmo 检查新的答案,也许它适合你。

标签: javascript android ios react-native


【解决方案1】:

为了使用 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 convert size得到字节计算

代码可能太长,无法计算文件大小。如果有人找到最简单的方法指导我

【讨论】:

  • 不要使用它,它会使应用程序与任何远程大文件一起崩溃。请改用@mfekim 的答案:const { size } = await RNFetchBlob.fs.stat(PATH_OF_THE_TARGET)
【解决方案2】:

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

【讨论】:

  • 文件的 mime-type 怎么样?
【解决方案3】:

文件大小:这个答案最适合新的 CRNA 客户端。使用世博会的File System

import {FileSystem} from expo 

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

【讨论】:

    【解决方案4】:

    使用 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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 如果有人欺骗了扩展怎么办?有合适的方法吗?
      猜你喜欢
      • 2010-11-05
      • 2011-05-27
      • 2014-06-14
      • 2015-06-13
      • 2013-05-24
      • 1970-01-01
      • 2019-09-24
      相关资源
      最近更新 更多