美文网首页
springboot - 上传图片(以jar包运行)

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

作者: 尼尔君 | 来源:发表于2018-07-12 10:57 被阅读0次

Pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.26</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>


        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

      <!-- 做上传需要用到的-->
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

      <!-- 这个是使项目支持@sf4j和 自动生成getset等等-->
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>


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提交,否则会报错。

<form enctype="multipart/form-data" method="post" action="/upload">
    <input type="file"  name="file"/>
    <button type="submit">提交</button>
</form>

控制层

    //读取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包运行)

      本文链接:https://www.haomeiwen.com/subject/nfplpftx.html