SpringBoot上传和下载文件(二十七)上

简介: SpringBoot上传和下载文件(二十七)上

一. SpringBoot 上传和下载前期准备


创建项目,按照 整合 Thymeleaf 的项目结构来.


关于 SpringBoot 如何整合Thymeleaf ,

可以看老蝴蝶以前写的文章: SpringBoot整合Thymeleaf(十三)

一. 一 创建页面 index.html

index.html

<!doctype html>
<!--注意:引入thymeleaf的名称空间-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type"content="text/html;charset=UTF-8">
    <title>文件上传</title>
    <link rel="StyleSheet" href="webjars/bootstrap/3.4.1/css/bootstrap.css" type="text/css">
</head>
<body class="container">
<p class="h1">上传文件</p>
<form  action="upload" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <div class="custom-file">
            <input type="file" class="custom-file-input" id="file" name="file">
            <label class="file-label" for="file">选择文件</label>
        </div>
    </div>
    <button type="submit" class="btn btn-primary">上传</button>
</form>
<p class="h1">文件下载</p>
<a href="download?fileName=yjl.p12">文件下载 yjl.p12</a>
<script type="text/javascript" src="webjars/jquery/3.5.1/jquery.js"></script>
<script type="text/javascript" src="webjars/bootstrap/3.4.1/js/bootstrap.js"></script>
</body>
</html>


对应的页面效果如下:

image.png



一.二 Controller

FileController.java

@Controller
public class FileController {
    //跳转到 index.html 页面
    @RequestMapping("/")
    public String index(){
        return "index";
    }
}

二. 上传文件

二.一 request 放置上传文件

采用以前的 request 获取文件:

@PostMapping("/upload")
    @ResponseBody
    public String upload(MultipartFile file, HttpServletRequest request) throws IOException {
        // 获得 classpath 的绝对路径
        String realPath = request.getServletContext().getRealPath("static/files");
        File newFile = new File(realPath);
        // 如果文件夹不存在、则新建
        if (!newFile.exists()){
            newFile.mkdirs();
        }
        // 上传
        file.transferTo(new File(newFile, file.getOriginalFilename()));
        String uploadPath=realPath+File.separator+file.getOriginalFilename();
        return "上传文件成功,地址为:"+uploadPath;
    }

 

页面访问 index, 选择文件,进行上传


image.png


会上传成功,返回的路径是:

image.png

可以发现,这是一个临时的文件


image.png


一般都不放置在临时目录下


二.二 放置在该项目类路径下

修改 realPath 路径值,放置在 classpath 路径下

//String realPath = request.getServletContext().getRealPath("static/files");
  String realPath = ResourceUtils.getURL("classpath:").getPath()+"static/files";


重新上传文件:

image.png


放置在本项目的 target 目录下

image.png



当执行 mvn clean ,重启服务器等操作时,上传的文件会被清空.


一般都放置在磁盘上,目录的位置由用户指定.


二.三 上传到指定的目录下

二.三.一 application.yml 配置变量,指定目录

application.yml

server:
  port: 8081
  servlet:
    context-path: /File
# 指定目录
uploadFilePath: D:/upload


放置在 D 盘下的 upload 目录下


二.三.二 通过 @Value 等属性注入并使用上传目录

@Controller
public class FileController {
    @Value("${uploadFilePath:D:}")
    private String uploadFilePath;
    @RequestMapping("/")
    public String index(){
        return "index";
    }
    @PostMapping("/upload")
    @ResponseBody
    public String upload(MultipartFile file, HttpServletRequest request) throws IOException {
        // 获得 classpath 的绝对路径
       //String realPath = request.getServletContext().getRealPath("static/files");
       //String realPath = ResourceUtils.getURL("classpath:").getPath()+"static/files";
        String realPath =uploadFilePath;
        File newFile = new File(realPath);
        // 如果文件夹不存在、则新建
        if (!newFile.exists()){
            newFile.mkdirs();
        }
        // 上传
        file.transferTo(new File(newFile, file.getOriginalFilename()));
        String uploadPath=realPath+File.separator+file.getOriginalFilename();
        return "上传文件成功,地址为:"+uploadPath;
    }
}


重新上传文件


image.png

image.png

这样,重启服务器等操作,就不会删除掉以前的上传文件了.


二.四 配置上传的文件大小

我们上传 yjl.p12 只有 2kb , 可以正确的上传


我们上传这个文件, 9.5M


image.png


image.png


后端控制台报错

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 1048576 bytes.


超过了允许的默认大小,上传失败


二.四.一 配置tomcat 上传大小

spring:
  # 配置thymeleaf的相关信息
  thymeleaf:
    # 开启视图解析
    enabled: true
    #编码格式
    encoding: UTF-8
    #前缀配置
    prefix: classpath:/templates/
    # 后缀配置
    suffix: .html
    #是否使用缓存 开发环境时不设置缓存
    cache: false
    # 格式为 HTML 格式
    mode: HTML5
    # 配置类型
    servlet:
      content-type: text/html
  #配置上传的文件信息
  servlet:
    multipart:
      max-file-size: 100MB   # 服务器端文件大小限制
      max-request-size: 100MB  # 客户端请求文件大小限制


默认的值为: 1m

image.png


二.四.二 重新上传测试

重启项目,再次上传

image.png



上传文件成功.

image.png



二.五 上传文件时传入其它的参数

/**
     * 上传文件时,同时传入参数的信息.
     * @date 2021/11/4 21:12
     * @author zk_yjl
     * @return
     */
    @PostMapping("/uploadParam")
    @ResponseBody
    public String uploadParam(@RequestParam MultipartFile file,@RequestParam String name,
                              @RequestParam Integer age) throws IOException {
        String realPath =uploadFilePath;
        File newFile = new File(realPath);
        System.out.println("传入的name参数值:"+name+",传入的age参数值:"+age);
        // 如果文件夹不存在、则新建
        if (!newFile.exists()){
            newFile.mkdirs();
        }
        // 上传
        file.transferTo(new File(newFile, file.getOriginalFilename()));
        String uploadPath=realPath+"/"+file.getOriginalFilename();
        return "上传文件成功,地址为:"+uploadPath;
    }


通过 @RequestParam 注解进行指定


我们采用 postman 方式进行测试


image.png


postman 上传文件,可以看: 使用PostMan上传文件


发送请求:


查看控制台打印信息:


传入的name参数值:两个蝴蝶飞,传入的age参数值:26


相关文章
|
1月前
|
Java
SpringBoot之文件上传(单文件与多文件上传的使用)
SpringBoot之文件上传(单文件与多文件上传的使用)
|
2月前
|
Java 关系型数据库 MySQL
文件在线压缩与解压|基于Springboot实现文件在线压缩与解压
文件在线压缩与解压|基于Springboot实现文件在线压缩与解压
|
2月前
|
前端开发 Java Apache
Spring Boot文件上传与下载讲解与实战(超详细 附源码)
Spring Boot文件上传与下载讲解与实战(超详细 附源码)
127 0
|
20天前
|
JavaScript 前端开发 Java
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
31 0
|
5天前
|
Java Docker 容器
docker部署springboot指定yml文件
docker部署springboot指定yml文件
7 0
|
20天前
|
druid JavaScript Java
SpringBoot+Vue.js实现大文件分片上传、断点续传与极速秒传
SpringBoot+Vue.js实现大文件分片上传、断点续传与极速秒传
|
26天前
|
存储 Java 大数据
Springboot整合Minio实现文件上传和下载
Minio是一个灵活、高性能、开源的对象存储解决方案,适用于各种存储需求,并可以与云计算、容器化、大数据和应用程序集成。它为用户提供了自主控制和可扩展性,使其成为一个强大的存储解决方案。
|
30天前
|
Java Maven
IDEA Maven SpringBoot配置POM文件
IDEA Maven SpringBoot配置POM文件
19 0
|
1月前
|
JavaScript 小程序 Java
基于Java+SpringBoot+Vue的摄影素材分享网站的设计与实现(亮点:活动报名、点赞评论、图片下载、视频下载、在线观看)
基于Java+SpringBoot+Vue的摄影素材分享网站的设计与实现(亮点:活动报名、点赞评论、图片下载、视频下载、在线观看)
33 0
|
1月前
|
JavaScript 小程序 Java
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)
36 0
基于Java+SpringBoot+Vue的大学生考勤系统的设计与实现(亮点:多角色、打卡签到、请假审批、上传成绩单文件、统计图展示)

相关产品

  • 云迁移中心