乐趣区

关于spring:实现上传图片

封装 VO 对象

@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class ImageVO {
 private Integer error;// 谬误提醒 0 程序运行失常 1. 文件上传有误
 private String url;// 图片拜访的虚构门路
 private Integer width;
 private Integer heigth;
 // 设定上传失败的办法
 public static ImageVO fail(){return  new ImageVO(1,null,null,null);
 }
 // 胜利
 public static ImageVO success(String url,Integer width,Integer heigth){return  new ImageVO(0,url,width,heigth);
 }
}

FileController 层

@RequestMapping("/pic/upload")
public ImageVO upload(MultipartFile uploadFile) throws IOException {return fileService.upload(uploadFile);
}

FileServiceImpl 层

@Service
public class FileServiceImpl implements FileService{
 // 筹备一个存储图片的文件夹
 private String rootpath="C:/jt";
 //1.2 筹备图片的汇合
 private static Set<String> imageTypeSet;
 static {imageTypeSet=new HashSet<>();
 imageTypeSet.add(".jpg");
 imageTypeSet.add(".png");
 imageTypeSet.add(".gif");
 }
 /**
 * 校验:* 1. 校验是否为图片
 * 2. 校验是否为歹意的程序
 * 3. 避免文件数量太多,分目录存储
 * 4. 避免文件重名
 * 实现文件上传
 * @param uploadFile
 * @return
 * @throws IOException
 */
 @Override
 public ImageVO upload(MultipartFile uploadFile) throws IOException {
 //1. 常见图片类型 jpg|png|gif…… //1.1 获取以后图片的名称之后截取其中的类型
 String fileName=uploadFile.getOriginalFilename();
 int index = fileName.lastIndexOf(".");
 String fileType = fileName.substring(index);
 // 转换为小写
 fileType= fileType.toLowerCase();
 //1.3 判断图片类型是否正确
 if(!imageTypeSet.contains(fileType)){return ImageVO.fail();// 图片类型不匹配
 }
 //2. 歹意校验 依据宽度 / 高度进行校验
 //2.1 利用工具 API 对象 读取字节信息 获取图片对象类型
 try{BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream());
 //2.2 校验是否有高度和宽度
 int width=bufferedImage.getWidth();
 int height=bufferedImage.getHeight();
 if (width==0||height==0)
 return ImageVO.fail();
 //3. 避免文件数量太多,分目录存储
 //3.1 将工夫依照指定的格局要求 转化为字符串
 String dateDir = new SimpleDateFormat("/yyyy/MM/dd/")
 .format(new Date());
 //3.2 拼接文件存储的目录对象
 String fileDir=rootpath+dateDir;
 File dirFile=new File(fileDir);
 //3.3 动态创建目录
 if(!dirFile.exists()){dirFile.mkdirs();
 }
 //4 避免文件重名
 //4.1 动静生成 uuid
 String uuid=
 UUID.randomUUID().toString().replace("-","");
 String realFileName=uuid+fileType;
 //5 实现文件上传
 //5.1 拼接文件实在门路
 String realFilePath=fileDir+realFileName;
 //5.2 封装对象 实现上传
 File realFile=new File(realFilePath);
 uploadFile.transferTo(realFile);
 String url="https://img.alicdn.com/imgextra/i1/2978217349/O1CN01EwgFIG249tI2uaFx3_!!0-item_pic.jpg_430x430q90.jpg";
 return ImageVO.success(url,width,height);
 }catch (Exception e){e.printStackTrace();
 return ImageVO.fail();}
 }}
退出移动版