修改图片(做了文件格式限制以及文件大小限制):
1.1 文件格式限制代码
String suffix = fileNameArr[fileNameArr.length-1];
//.sh .php 过滤掉不符合要求的文件
if (!suffix.equalsIgnoreCase("png")&&
!suffix.equalsIgnoreCase("jpg")&&
!suffix.equalsIgnoreCase("jpeg")){
IMOOCJSONResult.errorMsg("图片格式不正确");
}
1.2 静态资源文件映射
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
//实现静态资源的映射
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")//所有类型资源都可以映射
.addResourceLocations("file:\\E:\\workspaces\\images\\")//映射本地静态资源:操作系统中的一个目录
.addResourceLocations("classpath:META-INF/resources/")//这是映射swagger2
;
}
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
//windows下文件目录格式
file.imgUserFaceLocation=\\workspaces\\images\\foodie\\faces
file.imageServerUrl=http://localhost:8088/foodie/faces
2.3 文件大小限制
//限制文件大小
spring:
servlet:
multipart:
max-file-size: 512000 # 文件上传大小限制为500kb
max-request-size: 512000 # 请求大小限制为500kb
//捕获文件上传异常
@RestControllerAdvice
public class CustomExceptionHandler {
//FileUploadBase$SizeLimitExceededException
//上传文件超过500k捕获这个异常
@ExceptionHandler(MaxUploadSizeExceededException.class)
public IMOOCJSONResult handlerMaxUploadFile(MaxUploadSizeExceededException exception){
return IMOOCJSONResult.errorMsg("文件上传大小不能超过500k,请压缩图片或者降低图片质量再上传");
}
2.0 文件上传逻辑部分所有代码
@Autowired
private FileUpload fileUpload;
@ApiOperation(value = "修改用户头像", notes = "修改用户头像",httpMethod = "POST")
@PostMapping("uploadFace")
public IMOOCJSONResult uploadFace(
@ApiParam(name = "userId",value = "用户id",required = true)//必须要传的参数
@RequestParam String userId,
@ApiParam(name = "file",value = "用户头像",required = true)
MultipartFile file,
HttpServletResponse response,
HttpServletRequest request){
//.sh .php 过滤掉不符合要求的文件
//头像保存地址
// String fileSpace = IMG_USER_FACE_LOCATION;
String fileSpace = fileUpload.getImgUserFaceLocation();
String imageServerUrl = fileUpload.getImageServerUrl();
//在路径上为每一个用户增加一个userId,用于区分不同用户上传
String uploadPathPrefix = File.separator+userId;
//开始文件上传
if (file!=null){
FileOutputStream fileOutputStream = null;
try {
//获得文件上传的文件名称
String fileName = file.getOriginalFilename();
if (StringUtils.isBlank(fileName)){
IMOOCJSONResult.errorMsg("文件名不能为空");
}else{
//文件重命名 yuan-face.png - >"yuan-face","png"
String fileNameArr[] = fileName.split("\\.");
//获取文件的后缀名
String suffix = fileNameArr[fileNameArr.length-1];
//.sh .php 过滤掉不符合要求的文件
if (!suffix.equalsIgnoreCase("png")&&
!suffix.equalsIgnoreCase("jpg")&&
!suffix.equalsIgnoreCase("jpeg")){
IMOOCJSONResult.errorMsg("图片格式不正确");
}
//文件名称重组,覆盖式上传;增量式:额外拼接时间
String newFileName = "face-"+userId+"."+suffix;
//face-(userId).png
//上传的头像最终保存的位置
String finalFacePath=fileSpace+uploadPathPrefix+File.separator+newFileName;
//用于提供给web服务的地址
uploadPathPrefix =("/" +userId+"/"+ newFileName);
// System.out.println(finalFacePath);
File outFile = new File(finalFacePath);
if (outFile.getParentFile()!=null){
//创建文件夹
outFile.getParentFile().mkdirs();
}
//文件输出保存到目录
fileOutputStream = new FileOutputStream(outFile);
InputStream inputStream = file.getInputStream();
IOUtils.copy(inputStream,fileOutputStream);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fileOutputStream!=null) {
try {
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}else{
return IMOOCJSONResult.errorMsg("文件不能为空");
}
//更新用户头像到数据库
//由于浏览器存在缓存的情况,所以这里我们需要加上时间戳来保证更新后的图片可以及时刷新显示
String webFaceUrl = imageServerUrl+uploadPathPrefix+"?t="+ DateUtil.getCurrentDateString("yyyyMMddHHmmss");
System.out.println(webFaceUrl);//测试
Users userResult = centerUserSrvice.updateUserFace(userId,webFaceUrl);
CookieUtils.setCookie(request,response,"user",
JsonUtils.objectToJson(userResult),true);
return IMOOCJSONResult.ok();
}
# 技术博客