|
|
|
@ -11,40 +11,43 @@ import java.util.UUID;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @project: zhxy
|
|
|
|
|
* @description: 上传文件的工具类
|
|
|
|
|
* @description: 上传文件的工具类,主要用于处理图片文件的上传操作,
|
|
|
|
|
* 包括校验文件大小、格式,以及保存文件到指定路径等功能。
|
|
|
|
|
*/
|
|
|
|
|
public class UploadFile {
|
|
|
|
|
|
|
|
|
|
//存储文件上传失败的错误信息
|
|
|
|
|
// 存储文件上传失败的错误信息的 Map 对象
|
|
|
|
|
private static Map<String, Object> error_result = new HashMap<>();
|
|
|
|
|
//存储头像的上传结果信息
|
|
|
|
|
// 存储头像的上传结果信息的 Map 对象
|
|
|
|
|
private static Map<String, Object> upload_result = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @description: 效验所上传图片的大小及格式等信息...
|
|
|
|
|
* @param: photo
|
|
|
|
|
* @param: path
|
|
|
|
|
* @return: java.util.Map<java.lang.String, java.lang.Object>
|
|
|
|
|
* 校验所上传图片的大小及格式等信息
|
|
|
|
|
* @param photo 要上传的 MultipartFile 类型的图片文件
|
|
|
|
|
* @param path 图片要保存到的路径
|
|
|
|
|
* @return 如果校验失败,返回包含错误信息的 Map;如果校验成功,返回 null
|
|
|
|
|
*/
|
|
|
|
|
private static Map<String, Object> uploadPhoto(MultipartFile photo, String path) {
|
|
|
|
|
//限制头像大小(20M)
|
|
|
|
|
// 限制头像大小为 20M(20 * 1024 * 1024 字节)
|
|
|
|
|
int MAX_SIZE = 20971520;
|
|
|
|
|
//获取图片的原始名称
|
|
|
|
|
// 获取图片的原始名称
|
|
|
|
|
String orginalName = photo.getOriginalFilename();
|
|
|
|
|
//如果保存文件的路径不存在,则创建该目录
|
|
|
|
|
// 如果保存文件的路径不存在,则创建该目录
|
|
|
|
|
File filePath = new File(path);
|
|
|
|
|
if (!filePath.exists()) {
|
|
|
|
|
filePath.mkdirs();
|
|
|
|
|
}
|
|
|
|
|
//限制上传文件的大小
|
|
|
|
|
// 限制上传文件的大小,如果文件大小超过限制,则设置错误信息并返回
|
|
|
|
|
if (photo.getSize() > MAX_SIZE) {
|
|
|
|
|
error_result.put("success", false);
|
|
|
|
|
error_result.put("msg", "上传的图片大小不能超过20M哟!");
|
|
|
|
|
error_result.put("msg", "上传的图片大小不能超过 20M 哟!");
|
|
|
|
|
return error_result;
|
|
|
|
|
}
|
|
|
|
|
// 限制上传的文件类型
|
|
|
|
|
// 限制上传的文件类型,定义允许的文件后缀数组
|
|
|
|
|
String[] suffixs = new String[]{".png", ".PNG", ".jpg", ".JPG", ".jpeg", ".JPEG", ".gif", ".GIF", ".bmp", ".BMP"};
|
|
|
|
|
// 创建后缀文件过滤器
|
|
|
|
|
SuffixFileFilter suffixFileFilter = new SuffixFileFilter(suffixs);
|
|
|
|
|
// 检查文件类型是否符合要求,如果不符合,则设置错误信息并返回
|
|
|
|
|
if (!suffixFileFilter.accept(new File(path + orginalName))) {
|
|
|
|
|
error_result.put("success", false);
|
|
|
|
|
error_result.put("msg", "禁止上传此类型文件! 请上传图片哟!");
|
|
|
|
@ -55,30 +58,33 @@ public class UploadFile {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @description: (提取公共代码 : 提高代码的可重用性)获取头像的上传结果信息
|
|
|
|
|
* @param: photo
|
|
|
|
|
* @param: dirPaht
|
|
|
|
|
* @param: portraitPath
|
|
|
|
|
* @return: java.util.Map<java.lang.String, java.lang.Object>
|
|
|
|
|
* 提取公共代码,获取头像的上传结果信息
|
|
|
|
|
* @param photo 要上传的 MultipartFile 类型的图片文件
|
|
|
|
|
* @param dirPaht 图片要保存到的目录路径
|
|
|
|
|
* @param portraitPath 头像在项目中的路径前缀
|
|
|
|
|
* @return 包含上传结果信息的 Map,如上传是否成功、错误信息、头像路径等
|
|
|
|
|
*/
|
|
|
|
|
public static Map<String, Object> getUploadResult(MultipartFile photo, String dirPaht, String portraitPath) {
|
|
|
|
|
|
|
|
|
|
// 检查文件是否为空且大小大于 0
|
|
|
|
|
if (!photo.isEmpty() && photo.getSize() > 0) {
|
|
|
|
|
//获取图片的原始名称
|
|
|
|
|
// 获取图片的原始名称
|
|
|
|
|
String orginalName = photo.getOriginalFilename();
|
|
|
|
|
//上传图片,error_result:存储头像上传失败的错误信息
|
|
|
|
|
// 上传图片并获取错误信息(如果有)
|
|
|
|
|
Map<String, Object> error_result = UploadFile.uploadPhoto(photo, dirPaht);
|
|
|
|
|
if (error_result != null) {
|
|
|
|
|
return error_result;
|
|
|
|
|
}
|
|
|
|
|
//使用UUID重命名图片名称(uuid__原始图片名称)
|
|
|
|
|
// 使用 UUID 重命名图片名称(uuid__原始图片名称)
|
|
|
|
|
String newPhotoName = UUID.randomUUID() + "__" + orginalName;
|
|
|
|
|
//将上传的文件保存到目标目录下
|
|
|
|
|
// 将上传的文件保存到目标目录下
|
|
|
|
|
try {
|
|
|
|
|
photo.transferTo(new File(dirPaht + newPhotoName));
|
|
|
|
|
// 设置上传成功的信息,并将头像在项目中的完整路径返回
|
|
|
|
|
upload_result.put("success", true);
|
|
|
|
|
upload_result.put("portrait_path", portraitPath + newPhotoName);//将存储头像的项目路径返回给页面
|
|
|
|
|
upload_result.put("portrait_path", portraitPath + newPhotoName);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
// 处理上传失败的情况,设置错误信息
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
upload_result.put("success", false);
|
|
|
|
|
upload_result.put("msg", "上传文件失败! 服务器端发生异常!");
|
|
|
|
@ -86,9 +92,10 @@ public class UploadFile {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// 文件为空或大小为 0 时,设置上传失败的信息
|
|
|
|
|
upload_result.put("success", false);
|
|
|
|
|
upload_result.put("msg", "头像上传失败! 未找到指定图片!");
|
|
|
|
|
}
|
|
|
|
|
return upload_result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|