上传图片

柔情只为你懂 2021-12-23 13:47 540阅读 0赞
  1. @Service
  2. public class FileServiceImpl implements FileService {
  3. private String localPath = "E:/jt-upload/";//本地磁盘路径
  4. private String urlPath = "http://image.jt.com/";
  5. /*
  6. * 1.判断文件是否为图片 .jpg|png|gif
  7. * 2.判断是否为恶意程序
  8. * 3.分文件存储
  9. * 4.保证文件不重名
  10. */
  11. @Override
  12. public PicUploadResult uploadFile(MultipartFile uploadFile) {
  13. PicUploadResult result = new PicUploadResult();
  14. //1.获取图片名称 ABC.JPG|PNG|GIF
  15. String fileName = uploadFile.getOriginalFilename();
  16. fileName = fileName.toLowerCase();//将字符全部小写
  17. //2.使用正则表达式判断
  18. if(!fileName.matches("^.*(jpg|png|gif)$")){
  19. result.setError(1);//表示不是图片
  20. return result;
  21. }
  22. //3.判断图片是否为恶意程序
  23. try {
  24. BufferedImage bufferedImage =
  25. ImageIO.read(uploadFile.getInputStream());
  26. int width = bufferedImage.getWidth();
  27. int height = bufferedImage.getHeight();
  28. if(width == 0 || height ==0){
  29. result.setError(1);
  30. return result;
  31. }
  32. //4.为了实现分文件存储 yyyy/MM/dd
  33. String dateDir =
  34. new SimpleDateFormat("yyyy/MM/dd")
  35. .format(new Date()).toString();
  36. //创建文件夹 E:/jt-upload/2018/11/11
  37. String fileDir = localPath + dateDir;
  38. File dirFile = new File(fileDir);
  39. if(!dirFile.exists()){
  40. dirFile.mkdirs();
  41. }
  42. /*
  43. * 5.防止文件重名
  44. * 5.1截取文件的后缀
  45. * 5.2使用UUID当文件名 + 随机数3位
  46. */
  47. String fileType =
  48. fileName.substring(fileName.lastIndexOf("."));
  49. String UUIDName = UUID.randomUUID().toString()
  50. .replace("-", "");
  51. int randomNum = new Random().nextInt(1000);
  52. //fa907e5e9f9a11e891a854ee75ecd89b123.jpg
  53. String realFileName = UUIDName + randomNum + fileType;
  54. //实现文件上传
  55. /**
  56. * E:jt-upload/yyyy/MM/dd/54ee75ecd89b123.jpg
  57. */
  58. String realLocalPath = fileDir + "/" + realFileName;
  59. uploadFile.transferTo(new File(realLocalPath));
  60. //设定图片宽度和高度
  61. result.setHeight(height +"");
  62. result.setWidth(width + "");
  63. /**
  64. * 现图片回显 定义网络请求路径
  65. * http://image.jt.com/yyyy/MM/ddasdfasdfadsfasdf.jpg
  66. */
  67. String realUrlPath = urlPath + dateDir + "/" + realFileName;
  68. result.setUrl(realUrlPath);
  69. } catch (Exception e) {
  70. e.printStackTrace();
  71. //不是图片
  72. result.setError(1);
  73. return result;
  74. }
  75. return result;
  76. }
  77. }
  78. <!-- 文件上传组件 -->
  79. <dependency>
  80. <groupId>commons-fileupload</groupId>
  81. <artifactId>commons-fileupload</artifactId>
  82. <version>1.3.1</version>
  83. </dependency>
  84. <dependency>
  85. <groupId>org.apache.commons</groupId>
  86. <artifactId>commons-lang3</artifactId>
  87. <version>3.3.2</version>
  88. </dependency>

发表评论

表情:
评论列表 (有 0 条评论,540人围观)

还没有评论,来说两句吧...

相关阅读

    相关 图片

    上篇博客已经介绍了文件的上传,这次就简单总结一下图片的上传,以及上传图片的显示。 利用三个控件:Input(File)、Button控件、Image控件,页面简单设计如下图:

    相关 图片

    开发工具与关键技术:Visual Studio 作者:肖广斌 撰写时间:2019年5月12日 在做项目时,我们在完善一些个人信息、或者一些页面时,我们需要用到图片,