文件工具类

news/2024/11/8 16:24:29 标签: python, 开发语言
  • isImage(MultipartFile file) 检查文件是否是图片类型
  • isExcel(MultipartFile file) 检查文件是否是excel类型
  • checkFileType(MultipartFile file, String... type) 检查文件是否是指定的类型
  • uploadFile(MultipartFile file) 上传文件
  • downloadFile(HttpServletResponse response, String fileName) 下载文件
  • deleteFile(String fileName) 删除文件
package com.ywz.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.UUID;

/**
 * 类描述 -> 文件工具类
 *  isImage(MultipartFile file) 检查文件是否是图片类型
 *  isExcel(MultipartFile file) 检查文件是否是excel类型
 *  checkFileType(MultipartFile file, String... type) 检查文件是否是指定的类型
 *  uploadFile(MultipartFile file) 上传文件
 *  downloadFile(HttpServletResponse response, String fileName) 下载文件
 *  deleteFile(String fileName) 删除文件
 * @Author: ywz
 * @Date: 2024/11/08
 */
@Slf4j
public class FileUtils {

    private static final String FILE_PATH = "D:\\file\\";
    public static final String[] IMAGES = {".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".svg", ".ico"};

    /**
     * 方法描述 -> 检查文件是否是图片类型
     *
     * @param file 文件
     * @Author: ywz
     * @Date: 2024/11/08
     */
    public static boolean isImage(MultipartFile file) {
        return checkFileType(file, IMAGES);
    }

    /**
     * 方法描述 -> 检查文件是否是excel类型
     *
     * @param file 文件
     * @Author: ywz
     * @Date: 2024/11/08
     */
    public static boolean isExcel(MultipartFile file) {
        return checkFileType(file, ".xlsx", ".xls");
    }

    /**
     * 方法描述 ->  检查文件是否是指定的类型
     *
     * @param file 文件
     * @param type 文件类型
     * @Author: ywz
     * @Date: 2024/10/23
     */
    public static boolean checkFileType(MultipartFile file, String... type) {
        if (file == null) return false;
        String originalFilename = file.getOriginalFilename();
        if (StringUtils.isEmpty(originalFilename)) return false;
        for (String s : type) {
            if (originalFilename.endsWith(s))
                return true;
        }
        return false;
    }

    /**
     * 方法描述 -> 上传文件
     *
     * @param file 文件
     * @Author: ywz
     * @Date: 2024/11/08
     */
    public static ResultResp uploadFile(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        //获取原文件的类型
        assert originalFilename != null;
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        //使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
        String fileName = UUID.randomUUID() + suffix;
        //创建一个目录对象,用于存储上传文件
        File dir = new File(FILE_PATH);
        //判断当前目录是否存在:目录不存在,需要创建
        if (!dir.mkdirs())
            return ResultResp.error("目录创建失败");
        try {
            //保存文件到指定目录
            file.transferTo(new File(FILE_PATH + fileName));
            return ResultResp.success(fileName);
        } catch (IOException e) {
            log.error("文件上传失败", e);
            return ResultResp.error("文件上传失败");
        }
    }

    /**
     * 方法描述 -> 下载文件
     *
     * @param fileName 文件名
     * @param resp 响应
     * @param contentType 文件类型,比如:image/png(png图片)
     * @Author: ywz
     * @Date: 2024/11/08
     */
    public static ResultResp downloadFile(String fileName, HttpServletResponse resp, String contentType) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            File file = new File(FILE_PATH + fileName);
            if (!file.exists())
                return ResultResp.error("文件不存在");
            //输入流,通过输入流读取文件内容
            bis = new BufferedInputStream(Files.newInputStream(file.toPath()));
            //输出流,通过输出流将文件写回浏览器
            bos = new BufferedOutputStream(resp.getOutputStream());
            // 设置相应类型
            resp.setContentType(contentType);
            int i = 0;
            while ((i = bis.read()) != -1) {
                bos.write(i);
            }
            bos.flush();
        } catch (Exception e) {
            log.error("文件下载失败", e);
        } finally {
            try {
                if (bos != null) bos.close();
                if (bis != null) bis.close();
            } catch (IOException e) {
                log.error("文件流关闭失败", e);
            }
        }
        return null;
    }

    /**
     * 方法描述 -> 删除文件
     *
     * @param fileName 文件名
     * @Author: ywz
     * @Date: 2024/11/08
     */
    public static ResultResp deleteFile(String fileName) {
        File file = new File(FILE_PATH + fileName);
        if (!file.exists())
            return ResultResp.error("文件不存在");
        if (!file.delete())
            return ResultResp.error("文件删除失败");
        return ResultResp.success("文件删除成功");
    }
}


http://www.niftyadmin.cn/n/5744147.html

相关文章

CSS如何改变滚动条的颜色样式粗细?

默认滚动条很丑怎么办?如何改版滚动条的粗细,颜色,让它更美观?CSS如何改变滚动条的粗细? 干货来了 /* Webkit内核浏览器的滚动条样式 */ ::-webkit-scrollbar {width: 4px; /* 设置滚动条的宽度 */ }::-webkit-scroll…

【大数据学习 | kafka高级部分】kafka的kraft集群

首先我们分析一下zookeeper在kafka中的作用 zookeeper可以实现controller的选举,并且记录topic和partition的元数据信息,帮助多个broker同步数据信息。 在新版本中的kraft模式中可以这个管理和选举可以用kafka自己完成,而不再依赖zookeeper。…

Docker与Cgroups资源控制实战

Docker与Cgroups资源控制实战 一、Cgroups简介 Cgroups(Control Groups)是Linux内核提供的一种机制,用于将进程按组进行管理,并限制和统计这些进程的资源使用情况。这些资源包括CPU、内存、存储、网络等。通过Cgroups&#xff0…

【NOIP普及组】质因数分解

【NOIP普及组】质因数分解 C语言代码C代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。 输入 输入只有一行,包含一个正整数…

React.lazy() 懒加载

概要 React.lazy() 是 React 16.6 引入的一个功能,用于实现代码分割(code splitting)。它允许你懒加载组件,即在需要时才加载组件,而不是在应用初始加载时就加载所有组件。这种方法可以显著提高应用的性能&#xff0c…

基于Springboot+Vue的网上课程学习系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…

植物神经功能紊乱?这些维生素或许能帮到你!

植物神经功能紊乱,这个听起来有些陌生的名词,实际上却是一种常见的内脏功能失调综合征。它可能与心理、遗传、疾病等多种因素有关,表现为多个系统的症状,如睡眠障碍、心悸、头痛、胸闷、多汗等,严重影响了患者的生活质…

C语言实现数据结构之堆

文章目录 堆一. 树概念及结构1. 树的概念2. 树的相关概念3. 树的表示4. 树在实际中的运用(表示文件系统的目录树结构) 二. 二叉树概念及结构1. 概念2. 特殊的二叉树3. 二叉树的性质4. 二叉树的存储结构 三. 二叉树的顺序结构及实现1. 二叉树的顺序结构2.…