获取文件大小并转换单位

news2024/11/25 23:33:38

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文件大小获取并转换单位

  • 1. 获取文件大小分析
  • 2. 文件大小单位转换
  • 3. 文件大小获取并转换单位的代码
  • 4. 请求路由接口
  • 5. postman测试
  • 6. 验证文件大小


此番功能调试基于springboot项目demo,如需搭建springboot请参考:springboot搭建

注:由于multipart文件类型只能通过postman传入,故使用springboot搭建并使用路由进行测试。

1. 获取文件大小分析

由于获取文件的途径有所不同,故获取文件大小也有不同,目前知道两种方式获取文件:
一种是本地路径读取

//如F:\UPLOAD\01Z91J07A165_High.txt
String filePath = "文件本地全路径名";
File file = new File(filePath);
//文件大小为fileSize,单位为B(byte)
long fileSize = file.length();

一种是multipart文件格式传入(体现在postman中的form-data文件传入)

    public void getFileSize(MultipartFile multipartFile){
    	//可直接通过getSize函数获取文件大小
        long fileSize = multipartFile.getSize();
    }

2. 文件大小单位转换

这里需要了解下文件大小单位的转换

1KB = 1024B
1MB = 1024KB = 1048576B
1GB = 1024MB = 1048576KB = 1073741824B
1TB = 1024GB = 1048576MB = 1073741824KB = 1099511627776B
1PB = 1024TB = 1048576GB = 1073741824MB = 1099511627776KB = 1125899906842624B

3. 文件大小获取并转换单位的代码

首先获取文件大小,然后根据是否满1个单位来确定单位
fileSize<1024B 则单位为B
1KB<fileSize<1024KB 则单位为KB
1MB<fileSize<1024MB 则单位为MB
以此类推
代码如下

package com.data.utils;

import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.text.DecimalFormat;

/**
 * @Description: 文件大小单位转换工具类
 * @Version 1.0
 * @Author 李白
 * @Date 2023/7/5 星期三 15:45
 */
public class FileSizeUtils {
    /**
     * 获取文件大小并转换单位
     * @param multipartFile multipart格式文件传入
     * @return
     */
    public static String getFileSize(MultipartFile multipartFile){
        long fileSize = multipartFile.getSize();
        System.out.println("fileSize: "+fileSize);
        DecimalFormat df = new DecimalFormat("#.00");
        String fileSizeString = "";
        if (fileSize == 0) {
            fileSizeString = "0B";
        }else if (fileSize < 1024) {
            fileSizeString = df.format((double) fileSize) + "B";
        } else if (fileSize < 1048576) {
            fileSizeString = df.format((double) fileSize / 1024) + "KB";
        } else if (fileSize < 1073741824) {
            fileSizeString = df.format((double) fileSize / 1048576) + "MB";
        } else {
            fileSizeString = df.format((double) fileSize / 1073741824) + "GB";
        }
        System.out.println("fileSizeString: "+fileSizeString);
        return fileSizeString;
    }

    /**
     * 获取文件大小并转换单位
     * @param filePath 本地文件路径
     * @return
     */
    public static String getFileSize(String filePath){
        File file = new File(filePath);
        String fileSizeString = "";
            long fileSize = file.length();
            System.out.println("fileSize: "+fileSize);
            DecimalFormat df = new DecimalFormat("#.00");
            if (fileSize == 0) {
                fileSizeString = "0B";
            }else if (fileSize < 1024) {
                fileSizeString = df.format((double) fileSize) + "B";
            } else if (fileSize < 1048576) {
                fileSizeString = df.format((double) fileSize / 1024) + "KB";
            } else if (fileSize < 1073741824) {
                fileSizeString = df.format((double) fileSize / 1048576) + "MB";
            } else if (fileSize < 1099511627776L) {
                fileSizeString = df.format((double) fileSize / 1073741824) + "GB";
            } /*else if (fileSize < 1125899906842624L) {
                fileSizeString = df.format((double) fileSize / 1099511627776L) + "TB";
            } else {
                fileSizeString = df.format((double) fileSize / 1125899906842624L) + "PB";
            }*/
        System.out.println("fileSizeString: "+fileSizeString);
        return fileSizeString;
    }
}

4. 请求路由接口

package com.data.controller;

import com.data.utils.FileSizeUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * @Description: 文件大小单位转换
 * @Version 1.0
 * @Author 李白
 * @Date 2023/7/5 星期三 15:41
 */
@CrossOrigin
@RestController
@RequestMapping("/file")
public class FileSizeTest {
    @PostMapping("/getFileSize")
    public String fileSizeGet(@RequestParam("multiFile") MultipartFile multipartFile){
        String fileSize = FileSizeUtils.getFileSize("F:\\UPLOAD\\01Z91J07A165_High.txt");
        String multiFileSize = FileSizeUtils.getFileSize(multipartFile);
        return "fileSize: "+fileSize+"   multiFileSize:"+multiFileSize;
    }
}

5. postman测试

运行项目
打开postman
输入请求路由地址

127.0.0.1:8099/file/getFileSize

注意参数填写
key的值填的是请求接口中@RequestParam括号中的参数,文件类型选择File填
然后选取要上传的文件即可
如下图
在这里插入图片描述
发起请求
postman返回如下
在这里插入图片描述
控制台打印
在这里插入图片描述

6. 验证文件大小

刚刚上传的文件选中后鼠标右键点属性查看文件的大小来验证是否正确
在这里插入图片描述
在这里插入图片描述

可以看到,字节大小一致,MB为单位差了0.01,问题不大


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/720791.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【工具使用】Notepad++如何使用正则表达式同时搜索多个字符串

一&#xff0c;简介 在调试代码定位问题的时候&#xff0c;由于log打印比较多&#xff0c;故需要使用NotePad文本编辑器进行搜索&#xff0c;并且需要同时搜索多个字符串&#xff0c;本文介绍如何同时搜索多个字符串&#xff0c;供参考。 二&#xff0c;操作步骤 2.1 搜索设…

90、基于STM32单片机数字频率计频率检测配NE555脉冲发生器设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

如何基于 ESP-IDF SDK 为应用工程添加自定义的 menuconfig 编译条件设置?

在工程的 main 目录下添加 Kconfig.projbuild 文件对需要添加自定义设置的参数进行定义在应用代码中使用自定义设置的参数编写 Kconfig.projbuild 文件 在工程的 main 目录下添加 Kconfig.projbuild 文件 接下来会基于 esp-idf/examples/peripherals/uart/uart_async_rxtxtask…

Python黑魔法揭秘:超强公共操作符和推导式的编程技巧

文章目录 前言公共操作1.运算符1&#xff09; 合并操作2&#xff09;* 复制操作in / not in 判断数据在 / 不在容器中 公共方法len()del / del()max()min()range()enumerate() 容器类型转换1&#xff09;list() 将某个序列转化为列表tuple() 将某个序列转换为元组set() 将某个序…

OpenCloudOS社区开源,助力软件开发

早前红帽宣布限制源代码访问性的政策&#xff0c;并解释说RHEL相关源码仅通过CentOS Stream公开&#xff0c;付费客户和合作伙伴可通过Red Hat Customer Portal访问到源代码&#xff0c;由此也导致非客户获取源码越来越麻烦&#xff0c; 据了解&#xff0c;CentOS是红帽发行的…

效率为王!项目管理软件如何帮你提高效率?

对于任何商业组织及其客户来说&#xff0c;低效率的员工和浪费的时间都是一个问题。团队成员懈怠会对团队的整体效率产生负面影响。除了巨大的财务挫折之外&#xff0c;这些问题的混合还导致多次延误、工作质量差和客户不满意。 但有了正确的项目管理软件&#xff0c;企业就可…

Netty各组件执行流程及原理

目录 一、netty执行流程 二、EventLoop 1、事件循环对象EventLoop 2、事件循环对象组EventLoopGroup 3、io任务 4、分工细化 5、handler执行中如何换的group 三、Channel 1、常用方法 2、channelFuture 3、为什么要异步 四、Future & Promise 1、jdk future …

Linux13.文件(上)

1.文件 内容 属性。 2.在程序中创建一个文件&#xff0c;文件是进程创建的(跑起来才有)&#xff0c;默认路径是进程的工作路径。 3. C语言中字符串以\0结尾&#xff0c;文件不是。 4.指令 >文件 :清空文件。 5.理解cat指令的实现方式。 6.使用位操作传递宏标记位 7.操…

C语言经典案例-2

今天继续给大家分享C语言学习的经典练手案例 记录在校学习第三天&#xff0c;继续加油 今日案例来源&#xff1a;csdn社区每日一练 1.商品优惠计算机 商品优惠计算器 使用if语句编程实现输入购货金额&#xff0c;输出实际付款金额。购货折扣率如下&#xff1a; 购货金额≤500元…

skywalking linux安装部署

SkyWalking APM tar 下载 结合自己的es版本下载对应的tar 地址&#xff1a;https://archive.apache.org/dist/skywalking/ 由于我使用的是es7所以下载对应版本 拷贝对应链接使用wget下载 wget https://archive.apache.org/dist/skywalking/8.7.0/apache-skywalking-apm-es7…

Neon入门以及常用函数

什么是neon&#xff0c; neon是arm架构下的一个simd的一种方案&#xff0c; 本质上是一些可以用于simd的寄存器 具体参考官方的图&#xff1a; 官方的图说明对于arm开发板&#xff0c; 有16个128bit的寄存器&#xff0c;或者也可以看作是32个64bit的寄存器 列一下常用的neon…

从零开发短视频电商 使用nimbus-jose-jwt进行对称签名和非对称签名的JWT实现

文章目录 什么是JSON Web Token何时使用JSON Web TokenJSON Web Token的结构是什么头部&#xff08;Header&#xff09;负载&#xff08;Payload&#xff09;签名&#xff08;Signature&#xff09;拼接起来 如何使用JSON Web Token工具库依赖流程对称签名非对称签名 总结 JWT的…

超实用攻略!GPT能玩的这么6,你居然还不知道?

开篇 自古以来,智者皆知学无止境,而在我们身边,正有一款奠基于这个原则的AI机器人—ChatGPT,他擅长从网络上学习各种知识,然后把这些知识用在他的对话中。没错,它就是天马行空的闲话家,无所不谈的取经者。可你知道怎样让它更加符合你的使用需求,适应你的工作节奏么?哦…

Qt Quick系列(9)—初识画布

&#x1f680;作者&#xff1a;CAccept &#x1f382;专栏&#xff1a;Qt Quick 文章目录 前言代码示例1源码关键知识点 代码示例2源码关键知识点 总结 前言 画布元素的基本思想是使用上下文2D对象&#xff08;ctx&#xff09;渲染路径。上下文2D对象包含必要的图形功能&…

一文读懂FPC(12)- FPC的阻抗控制

FPC系列文章目录 1.什么是FPC 2.什么是R-FPC 3&#xff0c;FPC的基材 4.FPC基材压延铜和电解铜的区别 5&#xff0c;FPC的辅材 6&#xff0c;FPC常见的四种类型 7&#xff0c;FPC的生产流程简介 8&#xff0c;R-FPC的生产流程简介 9&#xff0c;FPC的发展及应用 10&a…

Vue :在 VSCode 中安装 yarn 并用 yarn 工具来控制 Vue 项目的详细过程

Ⅰ、 Yarn 工具简介&#xff1a; 1、什么是 yarn 工具: Yarn 是 facebook 发布的一款取代 npm 的资源包管理工具&#xff0c;是一个快速、可靠、安全的依赖管理工具&#xff0c;一款新的 JavaScript 资源包管理工具(吐槽下&#xff1a;最大的弊端是&#xff0c;要通过 npm 来…

java中的String使用注意事项、StringBuilder、StringBuffer、StringJoiner

String使用注意事项 这里第二次创造了0个对象是因为字符串常量池中已经有"abc" StringBuilder 注意StringBuilder支持链式编程 StringBuilder s new StringBuilder("abc"); s.append(666).append("acb" ).append(666); System.out.printl…

89、基于STM32单片机激光测距仪远距离倒车防撞报警器系统设计(程序+原理图+PCB源文件+参考论文+硬件设计资料+元器件清单等)

单片机主芯片选择方案 方案一&#xff1a;AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元&a…

操作系统8:存储器的层次结构及程序的装入和链接

目录 1、存储器的层次结构 &#xff08;1&#xff09;多层结构的存储器系统 1.1 - 存储器的多层结构 1.2 - 可执行存储器 &#xff08;2&#xff09;主存储器与寄存器 2.1 - 主存储器 2.2 - 寄存器 &#xff08;3&#xff09;高速缓存和磁盘缓存 3.1 - 高速缓存 3.2 …

使用wordpress搭建WebStack导航网站记录

0 序言 首先&#xff0c;我来介绍下&#xff0c;这个webstack导航网站实际上是被做成了wordpress的一个主题&#xff0c;具体这个主题的下载地址如下&#xff1a; WordPress 版 WebStack 导航主题https://github.com/owen0o0/WebStack 我们不需要使用git clone命令&…