用户信息修改及头像上传功能实现
parent
750ba603fb
commit
75d444a532
@ -0,0 +1,15 @@
|
||||
package com.example.venue_reservation_service.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class UserInfo {
|
||||
|
||||
private Integer id;
|
||||
|
||||
private String username;
|
||||
|
||||
private String phone;
|
||||
|
||||
private String email;
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package com.example.venue_reservation_service.utils;
|
||||
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.imageio.ImageReader;
|
||||
import javax.imageio.stream.ImageInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
public class ImageValidator {
|
||||
|
||||
// 允许的图片扩展名(小写)
|
||||
private static final Set<String> ALLOWED_EXTENSIONS = Set.of("jpg", "jpeg", "png", "gif", "bmp", "webp");
|
||||
// 250MB 字节限制 (250 * 1024 * 1024)
|
||||
private static final long MAX_SIZE_BYTES = 262144000L;
|
||||
|
||||
/**
|
||||
* 验证是否为图片文件且大小<250MB
|
||||
* @param file MultipartFile对象
|
||||
* @return true=验证通过, false=验证失败
|
||||
*/
|
||||
public static boolean validateImageFile(MultipartFile file) {
|
||||
// 1. 基础检查
|
||||
if (file == null || file.isEmpty()) {
|
||||
return false; // 空文件直接拒绝[3,5](@ref)
|
||||
}
|
||||
|
||||
// 2. 验证文件大小
|
||||
if (file.getSize() > MAX_SIZE_BYTES) {
|
||||
return false; // 超过250MB[6,7](@ref)
|
||||
}
|
||||
|
||||
// 3. 校验扩展名
|
||||
String originalName = file.getOriginalFilename();
|
||||
if (originalName == null || originalName.lastIndexOf(".") == -1) {
|
||||
return false; // 无扩展名文件[5](@ref)
|
||||
}
|
||||
String extension = originalName.substring(originalName.lastIndexOf(".") + 1).toLowerCase();
|
||||
if (!ALLOWED_EXTENSIONS.contains(extension)) {
|
||||
return false; // 扩展名不在白名单[5](@ref)
|
||||
}
|
||||
|
||||
// 4. 通过文件头验证真实格式(防止伪扩展名)
|
||||
try (ImageInputStream iis = ImageIO.createImageInputStream(file.getInputStream())) {
|
||||
if (iis == null) return false; // 无法创建流
|
||||
|
||||
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
|
||||
return readers.hasNext(); // 存在ImageReader说明是有效图片[2,5](@ref)
|
||||
} catch (IOException e) {
|
||||
return false; // 读取异常视为非图片
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue