springboot - 上传图片(以jar包运行)

Pom文件



    4.0.0

    com.example
    demo
    0.0.1-SNAPSHOT
    jar

    demo
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.3.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    

        
            com.alibaba
            druid
            1.0.26
        

        
            javax.servlet
            javax.servlet-api
            provided
        


        
            javax.servlet
            jstl
        

        
            org.springframework.boot
            spring-boot-starter-tomcat
        

        
            org.apache.tomcat.embed
            tomcat-embed-jasper
        

        
            org.springframework.boot
            spring-boot-starter-freemarker
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            1.3.2
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

      
        
        
            commons-fileupload
            commons-fileupload
            1.3.1
        

      
        
        
            org.projectlombok
            lombok
            1.16.20
            provided
        


    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    





properties


web.uploadpath =E://img/

#这两个是重点
##第一个就是做ulr模式匹配,/**的作用是使上传的目录 比如E://img/ 设置成/**
      # 那么url请求的时候就可以直接写localhost://+文件名访问
spring.mvc.static-path-pattern=/**

//设置静态资源目录(因为这个项目用的是jar包 所以引入外部目录)
spring.resources.static-locations=file:${web.uploadpath}

#默认可以不写
spring.servlet.multipart.enabled=true
#默认可以不写
spring.servlet.multipart.location=
#默认可以不写
spring.servlet.multipart.file-size-threshold=0

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

ftl

这里需要注意的是 要用post提交,否则会报错。

控制层

    //读取properties中的属性作为上传图片的父目录
    @Value("${web.uploadpath}")
    private String path;
  
    //跳转到上传页面
    @GetMapping("/load")
    public String fileUploadPage(){
        return "upload";
    }

    //上传
    @PostMapping("/upload")
    public String fileUpload(@RequestParam("file") MultipartFile file, ModelMap map){
        
         //第一步,获取上传文件的文件名。
        String name =   file.getOriginalFilename();

        //第二步,判断是否有上传目录,没有则创建
        File fileParent = new File(path);
        if(!fileParent.exists()){
            fileParent.mkdir();
        }

        //获取上传文件的文件名(jpg)
        String ext = FilenameUtils.getExtension(name);

        //生成随机名字
        String uuidName = UUID.randomUUID().toString().replace("-","");

        //拼接后缀名
        String newFileName = uuidName+"."+ext;
        try {

           //实际就这一步骤起作用
            //可以结合linux的重命名移动文件命令来理解这句话  
            //例子:将/a目录移动到/b下,并重命名为c :mv /a /b/c
            //那么这个也是 ,将之前的上传的file直接重命名移动到目录下

            file.transferTo(new File(fileParent,newFileName));
            map.addAttribute("src",newFileName);
            return "download";
        } catch (IOException e) {
            log.info("上传出现异常!");

        }



        return "success";
    }



你可能感兴趣的:(springboot - 上传图片(以jar包运行))