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