SpringBoot下用thymeleaf实现文件上传简单案例

1. 准备

  1. springboot构建项目的基本知识
  2. thymeleaf的相关知识
  3. JDK1.8、idea2018

2. 新建工程

2.1 修改pom.xml

引入Thymeleaf、web相关依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.2 新建页面

  1. 新建一个uoload.html用于文件上传
<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>文件上传页面</title>
</head>
<body>
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="file" ><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>

enctype=“multipart/form-data” 是必须的,表示提交二进制文件

  1. 新建一个ok.html页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>上传成功</title>
</head>
<body>
    <div th:if="${fileName}">
        <h2 th:text="|${fileName} 上传成功,存储路径为 :${path}|"> </h2>
    </div>
</body>
</html>

2.3 修改application.properties文件

# 最大支持文件大小
spring.servlet.multipart.max-file-size=100MB
# 最大支持请求大小
spring.servlet.multipart.max-request-size=100MB

#默认支持文件上传
spring.servlet.multipart.enabled=true
#支持文件写入磁盘.
spring.servlet.multipart.file-size-threshold=0
# 上传文件的临时目录
spring.servlet.multipart.location=

设置上传文件的大小,默认是1m,太小了,文件超过1M就会出错,这里设置成100M

2.4 controller类

新建一个UploadController类:

package com.eknaij.springbootupload;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

@Controller
public class UploadController {
    @GetMapping("/")
    public String uploladPage(){
        return "upload";
    }
    @PostMapping("/upload")
    public String fileUpload(
            @RequestParam("file") MultipartFile file, HttpServletRequest req, Model model){
        try {
            String fileName = System.currentTimeMillis()+file.getOriginalFilename();
            String destFileName=req.getServletContext().getRealPath("")+"uploaded"+ File.separator+fileName;

            File destFile = new File(destFileName);
            destFile.getParentFile().mkdirs();
            System.out.println(destFile);
            file.transferTo(destFile);
            model.addAttribute("fileName",fileName);
            model.addAttribute("path",destFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return "上传失败," + e.getMessage();
        } catch (IOException e) {
            e.printStackTrace();
            return "上传失败," + e.getMessage();
        }
        return "OK";
    }
}

MultipartFile是Spring上传文件的封装类,包含了文件的二进制流和文件属性等信息,在配置文件中也可对相关属性进行配置,基本的配置信息如下:
spring.http.multipart.enabled=true #默认支持文件上传.
spring.http.multipart.file-size-threshold=0 #支持文件写入磁盘.
spring.http.multipart.location=# 上传文件的临时目录
spring.http.multipart.max-file-size=1Mb # 最大支持文件大小
spring.http.multipart.max-request-size=10Mb # 最大支持请求大小
最常用的是最后两个配置内容,限制文件上传大小,上传时超过大小会抛出异常。

几点说明:

  1. @RequestParam("file") MultipartFile file 接收上传的文件,MultipartFile上面已经解释
  2. System.currentTimeMillis()+file.getOriginalFilename() 根据上传时间给文件命名,避免重名上传后覆盖前文件
  3. req.getServletContext().getRealPath("")获取当前项目的服务器路径
  4. File destFile = new File(destFileName);destFile.getParentFile().mkdirs(); 第一次运行的时候,这个文件所在的目录往往是不存在的,这里需要创建一下目录
  5. file.transferTo(destFile); 把浏览器上传的文件复制到希望的位置

3. 运行

上传页面:
在这里插入图片描述
上传成功页面:
在这里插入图片描述
可以复制路径去文件夹里看一下:

在这里插入图片描述

本文源码已上传github,需要的请自取:本文源码地址

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值