- 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("文件删除成功");}
}