• SpringBoot图片文件上传


    上传图片

    1.简单的配置

    #配置properties文件
    #配置端口号
    server.port=8088
    
    #Spring配置
    #单次总文件大小
    spring.servlet.multipart.max-request-size=10MB
    #单个文件最大大小
    spring.servlet.multipart.max-file-size=2MB
    
    file.uploadPath= E:/photo/
    file.visitPath= http://localhost:8088/image/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    #配置虚拟路径
    @Configuration
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
    
    	@Value("${file.uploadPath}")
        private String uploadPath;
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            //String projectUpPath= GetPath.getProjectUpPath();
            String path="file:"+projectUpPath;
            //文件磁盘图片url 映射
            //配置server虚拟路径,handler为前台访问的目录,locations为files相对应的本地路径 
            registry.addResourceHandler("/image/**").addResourceLocations(path);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    获取当前项目所在路径的工具类
    public class GetPath {
    //    获取当前项目所在文件夹的上一级目录
        public static String getProjectUpPath(){
            String s1=System.getProperty("user.dir");
            String s2="\\\\";
            String[] ss=s1.split(s2);
            int count=ss.length;
            String path="";
            for (int i=1;i<count;++i){
                path=path+ss[i-1]+"/";
            }
            return path;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2.测试文件能否被接收

    1.controller
    @Controller
    public class UploadController {
        @Resource
        private UploadService uploadService;
    
        @RequestMapping(value = "/uploadPhoto",method = RequestMethod.POST)
        @ResponseBody
        public String uploadPhoto(MultipartFile photo){
            return uploadService.uploadPhoto(photo);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    2.service
    public interface UploadService {
        /**
         *  上传单张图片
         */
        public String uploadPhoto(MultipartFile photo);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    3.serviceImpl
    @Service
    public class UploadServiceImpl implements UploadService {
        @Override
        public String uploadPhoto(MultipartFile photo) {
            String originalFilename = photo.getOriginalFilename();
            System.out.println("上传图片的名称是:"+originalFilename);
            return "success!";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.获取图片的信息并将其存储起来

    @Service
    public class UploadServiceImpl implements UploadService {
    
        /**
         *   从properties中获取文件存储路径和返回路径前缀
         */
        @Value("${file.uploadPath}")
        private String uploadPath;
        @Value("${file.visitPath}")
        private String visitPath;
    
    
        @Override
        public String uploadPhoto(MultipartFile photo) {
    
            /**
             *  获取图片的属性
             */
            //获取图片名称
            String originalFilename = photo.getOriginalFilename();
            //获取图片大小(单位是字节,/1024就是kb)
            Long size=photo.getSize();
            //截取图片的后缀 lastIndexOf最后出现.的位置(获取文件后缀名)
            String imgSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
    
            System.out.println("上传图片的名称是:"+originalFilename);
            System.out.println("上传图片的大小是:"+size+"B");
            System.out.println("上传图片的后缀是:"+imgSuffix);
    
            /**
             *  图片的存储
             */
            //创建存储的路径
            String sPath="myPhoto/image/";
            File file=new File(uploadPath,sPath);   //拼接除文件名称外的完整路径
            System.out.println(file);
            //判断存储路径是否存在,不存在就创建
            if(!file.exists()) file.mkdirs(); // 如果目录不存在,则递归创建
            //防止上传的文件名重复,我们一般采用uuid的方式生成新的文件名进行文件的存储
            String newFileName = UUID.randomUUID().toString().replace("-","")+imgSuffix;
            System.out.println(newFileName);
            //指定文件上传后的完整路径(包括文件名称)
            File myPhoto=new File(file,newFileName);
            System.out.println(myPhoto);
            //将我们传进来的photo文件上传到我们刚刚创建的文件中,这里必须处理异常
            try{
                photo.transferTo(myPhoto);
            }catch (IOException e){
                e.printStackTrace();
                return "文件上传失败!";
            }
            return "success!";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    4.存储图片后返回可以访问图片的url路径

    @Service
    public class UploadServiceImpl implements UploadService {
    
        /**
         *   从properties中获取文件存储路径和返回路径前缀
         */
        @Value("${file.uploadPath}")
        private String uploadPath;
        @Value("${file.visitPath}")
        private String visitPath;
    
    
        @Override
        public String uploadPhoto(MultipartFile photo) {
    
            /**
             *  获取图片的属性
             */
            //获取图片名称
            String originalFilename = photo.getOriginalFilename();
            //获取图片大小(单位是字节,/1024就是kb)
            Long size=photo.getSize();
            //截取图片的后缀 lastIndexOf最后出现.的位置(获取文件后缀名)
            String imgSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
    
            System.out.println("上传图片的名称是:"+originalFilename);
            System.out.println("上传图片的大小是:"+size+"B");
            System.out.println("上传图片的后缀是:"+imgSuffix);
    
            /**
             *  图片的存储
             */
            //创建存储的路径
            String sPath="myPhoto/image/";
            File file=new File(uploadPath,sPath);   //拼接除文件名称外的完整路径
            System.out.println(file);
            //判断存储路径是否存在,不存在就创建
            if(!file.exists()) file.mkdirs(); // 如果目录不存在,则递归创建
            //防止上传的文件名重复,我们一般采用uuid的方式生成新的文件名进行文件的存储
            String newFileName = UUID.randomUUID().toString().replace("-","")+imgSuffix;
            System.out.println(newFileName);
            //指定文件上传后的完整路径(包括文件名称)
            File myPhoto=new File(file,newFileName);
            System.out.println(myPhoto);
            //将我们传进来的photo文件上传到我们刚刚创建的文件中,这里必须处理异常
            try{
                photo.transferTo(myPhoto);
            }catch (IOException e){
                e.printStackTrace();
                return "文件上传失败!";
            }
    
    
            //拼接照片可访问路径
            String newPath=visitPath+sPath+newFileName;
            System.out.println(newPath);
            return newPath;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    返回图片的访问路径,上传的图片通过重写WebMvcConfig的addResourceHandlers方法来设置本地图片和项目访问映射路径,然后通过拼接字符串的形式拼接出可以访问图片的url路径

    多张图片的上传

    上传方法

    多张图片上传时可以采用List<MultipartFile> 或者MultipartFile[] 来接收文件,然后对文件逐个存储
    
    • 1

    File类的使用

    java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作

    创建file对象

    public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
    
    public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
    
    public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    常用方法

    public String getAbsolutePath()	 :	返回此File的绝对路径名字符串。
    public String getPath()			 :	将此File转换为路径名字符串。
    public String getName()			 :	返回由此File表示的文件或目录的名称。
    public long length() 			 :	返回由此File表示的文件的长度。
    
    • 1
    • 2
    • 3
    • 4

    常用判断方法

    public boolean exists()		 :	此File表示的文件或目录是否实际存在。
    public boolean isDirectory() :	此File表示的是否为目录。
    public boolean isFile() 	 :	此File表示的是否为文件。
    
    • 1
    • 2
    • 3

    创建删除功能方法

    public boolean createNewFile()	 :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
    public boolean delete()			 :删除由此File表示的文件或目录。
    public boolean mkdir() 			 :创建由此File表示的目录。
    public boolean mkdirs()			 :创建由此File表示的目录,包括任何必需但不存在的父目录。
    
    • 1
    • 2
    • 3
    • 4

    目录的遍历

    public String[] list() 		:	返回一个String数组,表示该File目录中的所有子文件或目录。
    
    public File[] listFiles() 	:	返回一个File数组,表示该File目录中的所有的子文件或目录。
    
    • 1
    • 2
    • 3

    参考文章

    https://blog.csdn.net/weixin_51993595/article/details/121737305

    https://blog.csdn.net/m0_52133525/article/details/123395196

    https://blog.csdn.net/weixin_45393094/article/details/112056436

    https://blog.csdn.net/qq_41604890/article/details/114553632?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165656831316781667858345%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165656831316781667858345&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-20-114553632-null-null.142v26control,157v15new_3&utm_term=SpringBoot%E4%B8%8A%E4%BC%A0%E5%9B%BE%E7%89%87&spm=1018.2226.3001.4187

  • 相关阅读:
    函数模板和类模板实例介绍
    第二十一章《万年历》第1节:万年历项目简介
    抖音小店无货源,怎么能找到靠谱的货源?怎么和厂家进行沟通?
    阿里P8架构师首推Netty实战干货,实战篇+面试篇,将知识点一网打尽
    深度学习应用篇-元学习[13]:元学习概念、学习期、工作原理、模型分类等
    slickEdit 2022 (v27.0.2)Ubuntu安装以及破解
    python中import和from详解区别
    【闲聊杂谈】ElasticSearch的高级搜索相关
    回归预测分析 | MATLAB实现LSTM多输入多输出
    【国科大卜算】Moving Tables
  • 原文地址:https://blog.csdn.net/m0_46636892/article/details/125568893