广告
返回顶部
首页 > 资讯 > 精选 >SpringBoot如何实现文件上传与下载功能
  • 836
分享到

SpringBoot如何实现文件上传与下载功能

2023-07-02 08:07:30 836人浏览 薄情痞子
摘要

今天小编给大家分享一下SpringBoot如何实现文件上传与下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sprin

今天小编给大家分享一下SpringBoot如何实现文件上传与下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

Spring Boot文件上传与下载

在实际的WEB应用开发中,为了成功上传文件,必须将表单的method设置为post,并将enctype设置为multipart/fORM-data。只有这种设置,浏览器才能将所选文件的二进制数据发送给服务器

从Servlet 3.0开始,就提供了处理文件上传的方法,但这种文件上传需要在Java Servlet中完成,而spring mvc提供了更简单的封装。Spring MVC是通过Apache Commons FileUpload技术实现一个MultipartResolver的实现类CommonsMultipartResolver完成文件上传的。因此,Spring MVC的文件上传需要依赖Apache Commons FileUpload组件。

Spring MVC将上传文件自动绑定到MultipartFile对象中,MultipartFile提供了获取上传文件内容、文件名等方法,并通过transferTo方法将文件上传到服务器的磁盘中,MultipartFile的常用方法如下:

  • byte[] getBytes():获取文件数据。

  • String getContentType():获取文件MIME类型,如image/jpeg等。

  • InputStream getInputStream():获取文件流。

  • String getName():获取表单中文件组件的名字。

  • String getOriginalFilename():获取上传文件的原名。

  • long getSize():获取文件的字节大小,单位为byte。

  • boolean isEmpty():是否有(选择)上传文件。

  • void transferTo(File dest):将上传文件保存到一个目标文件中。

Spring Boot的spring-boot-starter-web已经集成了Spring MVC,所以使用Spring Boot实现文件上传,更加便捷,只需要引入Apache Commons FileUpload组件依赖即可。

举例说明

下面通过一个实例讲解Spring Boot文件上传与下载的实现过程。

【例7】Spring Boot文件上传与下载。

具体实现步骤如下。

1.引入Apache Commons FileUpload组件依赖

在Web应用ch7_2的pom.xml文件中,添加Apache Commons FileUpload组件依赖,具体代码如下:

<dependency>    <groupId>commons-fileupload</groupId>    <artifactId>commons-fileupload</artifactId>    <!-- 由于commons-fileupload组件不属于Spring Boot,所以需要加上版本 -->    <version>1.4</version></dependency>

2.设置上传文件大小限制

在Web应用ch7_2的配置文件application.properties中,添加如下配置进行限制上传文件大小。

#上传文件时,默认单个上传文件大小是1MB,max-file-size设置单个上传文件大小spring.servlet.multipart.max-file-size=50MB#默认总文件大小是10MB,max-request-size设置总上传文件大小spring.servlet.multipart.max-request-size=500MB

3.创建选择文件视图页面

在ch7_2应用的src/main/resources/templates目录下,创建选择文件视图页面uploadFile.html。该页面中有个enctype属性值为multipart/form-data的form表单,具体代码如下:

<!DOCTYPE html><html xmlns:th="Http://www.thymeleaf.org"><head><meta charset="UTF-8"><title>Insert title here</title><link rel="stylesheet" th:href="@{CSS/bootstrap.min.css}" /><!-- 默认访问 src/main/resources/static下的css文件夹--><link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}" /></head><body><div class="panel panel-primary">    <div class="panel-heading">      <h4 class="panel-title">文件上传示例</h4>    </div>  </div>  <div class="container">    <div class="row">      <div class="col-md-6 col-sm-6">        <form class="form-horizontal" action="upload" method="post" enctype="multipart/form-data">          <div class="form-group">            <div class="input-group col-md-6">              <span class="input-group-addon">                <i class="glyphicon glyphicon-pencil"></i>              </span>              <input class="form-control" type="text"               name="description" th:placeholder="文件描述"/>            </div>          </div>          <div class="form-group">            <div class="input-group col-md-6">              <span class="input-group-addon">                <i class="glyphicon glyphicon-search"></i>              </span>              <input class="form-control" type="file"               name="myfile" th:placeholder="请选择文件"/>            </div>          </div>          <div class="form-group">            <div class="col-md-6">              <div class="btn-group btn-group-justified">                <div class="btn-group">                  <button type="submit" class="btn btn-success">                    <span class="glyphicon glyphicon-share"></span>                     上传文件                  </button>                </div>              </div>            </div>          </div>        </form>      </div>    </div>  </div></body></html>

4.创建控制器

在ch7_2应用的com.ch.ch7_2.controller包中,创建控制器类TestFileUpload。在该类中有4个处理方法,一个是界面导航方法uploadFile,一个是实现文件上传的upload方法,一个是显示将要被下载文件的showDownLoad方法,一个是实现下载功能的download方法。核心代码如下:

@Controllerpublic class TestFileUpload {  @RequestMapping("/uploadFile")  public String uploadFile() {    return "uploadFile";  }    @RequestMapping("/upload")  public String upload(      httpservletRequest request,      @RequestParam("description") String description,      @RequestParam("myfile") MultipartFile myfile)throws IllegalStateException, IOException {    System.out.println("文件描述:" + description);    //如果选择了上传文件,将文件上传到指定的目录uploadFiles    if(!myfile.isEmpty()) {      //上传文件路径      String path = request.getServletContext().getRealPath("/uploadFiles/");      //获得上传文件原名      String fileName = myfile.getOriginalFilename();      File filePath = new File(path + File.separator + fileName);      //如果文件目录不存在,创建目录      if(!filePath.getParentFile().exists()) {        filePath.getParentFile().mkdirs();      }      //将上传文件保存到一个目标文件中      myfile.transferTo(filePath);    }    //转发到一个请求处理方法,查询将要下载的文件    return "forward:/showDownLoad";  }    @RequestMapping("/showDownLoad")  public String showDownLoad(HttpServletRequest request, Model model) {    String path = request.getServletContext().getRealPath("/uploadFiles/");    File fileDir = new File(path);    //从指定目录获得文件列表    File filesList[] = fileDir.listFiles();    model.addAttribute("filesList", filesList);    return "showFile";  }    @RequestMapping("/download")  public ResponseEntity<byte[]> download(      HttpServletRequest request,      @RequestParam("filename") String filename,      @RequestHeader("User-Agent") String userAgent) throws IOException {    //下载文件路径    String path = request.getServletContext().getRealPath("/uploadFiles/");    //构建将要下载的文件对象    File downFile = new File(path + File.separator + filename);    //ok表示HTTP中的状态是200    BodyBuilder builder = ResponseEntity.ok();    //内容长度    builder.contentLength(downFile.length());    //application/octet-stream:二进制流数据(最常见的文件下载)    builder.contentType(MediaType.APPLICATION_OCTET_STREAM);    //使用URLEncoder.encode对文件名进行编码    filename = URLEncoder.encode(filename,"UTF-8");        if(userAgent.indexOf("MSIE") > 0) {      //IE浏览器,只需要用UTF-8字符集进行URL编码      builder.header("Content-Disposition", "attachment; filename=" + filename);    }else {            builder.header("Content-Disposition", "attachment; filename*=UTF-8''" + filename);    }    return builder.body(FileUtils.readFileToByteArray(downFile));  }}

5.创建文件下载视图页面

在ch7_2应用的src/main/resources/templates目录下,创建文件下载视图页面showFile.html。核心代码如下:

<body>  <div class="panel panel-primary">    <div class="panel-heading">      <h4 class="panel-title">文件下载示例</h4>    </div>  </div>  <div class="container">    <div class="panel panel-primary">      <div class="panel-heading">        <h4 class="panel-title">文件列表</h4>      </div>      <div class="panel-body">        <div class="table table-responsive">          <table class="table table-bordered table-hover">            <tbody class="text-center">              <tr th:each="file,fileStat:${filesList}">                <td>                  <span th:text="${fileStat.count}"></span>                </td>                <td>                <!--file.name相当于调用getName()方法获得文件名称 -->                  <a th:href="@{download(filename=${file.name})}">                    <span th:text="${file.name}"></span>                  </a>                </td>              </tr>            </tbody>          </table>        </div>      </div>    </div>  </div></body>

6.运行

首先,运行Ch72Application主类。然后,访问http://localhost:8080/ch7_2/uploadFile测试文件上传与下载。

以上就是“SpringBoot如何实现文件上传与下载功能”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: SpringBoot如何实现文件上传与下载功能

本文链接: https://www.lsjlt.com/news/340597.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot如何实现文件上传与下载功能
    今天小编给大家分享一下SpringBoot如何实现文件上传与下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Sprin...
    99+
    2023-07-02
  • SpringBoot文件上传与下载功能实现详解
    目录前言1、引入Apache Commons FileUpload组件依赖2、设置上传文件大小限制3、创建选择文件视图页面4、创建控制器5、创建文件下载视图页面前言 文件上传与下载是...
    99+
    2022-11-13
    SpringBoot文件上传 SpringBoot文件下载
  • SpringBoot怎么实现文件上传与下载功能
    这篇“SpringBoot怎么实现文件上传与下载功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoot怎么实...
    99+
    2023-07-06
  • SpringBoot实现文件上传下载功能小结
    最近做的一个项目涉及到文件上传与下载。前端上传采用百度webUploader插件。有关该插件的使用方法还在研究中,日后整理再记录。本文主要介绍SpringBoot后台对文件上传与下载的处理。单文件上传// 单文件上传@RequestMapp...
    99+
    2023-05-31
    spring boot 文件上传
  • servlet实现文件上传与下载功能
    本文实例为大家分享了servlet实现文件上传与下载的具体代码,供大家参考,具体内容如下 内容 我们分两大模块来进行讲解,即上传的实现,与下载的实现 上传的实现 注意了我们在写上传表...
    99+
    2022-11-11
  • SpringBoot+微信小程序如何实现文件上传与下载功能
    这篇文章主要介绍SpringBoot+微信小程序如何实现文件上传与下载功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、文件上传1.1 后端部分1.1 引入Apache Commons FIleUpload组件依...
    99+
    2023-06-29
  • SpringBoot实现文件上传与下载功能的示例代码
    目录Spring Boot文件上传与下载举例说明1.引入Apache Commons FileUpload组件依赖2.设置上传文件大小限制3.创建选择文件视图页面4.创建控制器5.创...
    99+
    2022-11-13
  • Servlet如何实现文件的上传与下载功能
    这篇文章给大家分享的是有关Servlet如何实现文件的上传与下载功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现条件:需要一个form标签,method为post请求2、form的encType属性值为mu...
    99+
    2023-06-14
  • vue与django如何实现文件上传下载功能
    本篇内容主要讲解“vue与django如何实现文件上传下载功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue与django如何实现文件上传下载功能”吧!文件上传功能上传后端部分(一)Mod...
    99+
    2023-07-05
  • SpringBoot+微信小程序实现文件上传与下载功能详解
    目录1、文件上传1.1 后端部分1.2 小程序前端部分1.3 实现效果2、文件下载2.1 后端部分2.2 小程序前端部分2.3 实现效果1、文件上传 1.1 后端部分 1.1.1 引...
    99+
    2022-11-13
  • JavaWeb Servlet实现文件上传与下载功能实例
    目录前言项目准备文件上传前台页面文件下载资源准备超链接下载后台实现下载总结前言 在上网的时候我们常常遇到文件上传的情况,例如上传头像、上传资料等;当然除了上传,遇见下载的情况也很多,...
    99+
    2022-11-13
  • java实现文件上传下载功能
    本文实例为大家分享了java实现文件上传下载的具体代码,供大家参考,具体内容如下 1.上传单个文件 Controller控制层 import java.io.File; imp...
    99+
    2022-11-12
  • SpringMVC实现文件上传下载功能
    目录导入需要的依赖包一、单个文件上传二、多个文件上传三、上传文件列表显示四、文件下载今天遇到文件上传的问题,使用Ajax方式进行提交,服务器一直报错The current reque...
    99+
    2022-11-13
  • SpringBoot如何实现单文件与多文件上传功能
    这篇文章将为大家详细讲解有关SpringBoot如何实现单文件与多文件上传功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.单文件上传首先创建一个Spring Boot项目,并添加spring-boo...
    99+
    2023-06-26
  • SpringBoot如何实现上传和下载文件
    这篇文章主要介绍SpringBoot如何实现上传和下载文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!技术概述我们的项目是实现一个论坛。在论坛上发布博客时应该要可以上传文件,用户阅读博客是应该要可以下载文件。于是我...
    99+
    2023-06-20
  • 【SpringBoot+MyBatisPlus】文件上传与文件下载的应用与实现
    文章目录 前言一.文件上传二.改进三.文件下载四.上传图片/回显图片 前言 一次“上传文件”的点击蕴含着一轮请求,我们要做的就是针对每一次的请求进行i/o处理,并返回给前端用户 一.文...
    99+
    2023-09-08
    spring boot java mybatis
  • SpringBoot实现单文件与多文件上传功能
    目录1.单文件上传2.多文件上传1.单文件上传 首先创建一个Spring Boot项目,并添加spring-boot-starter-web依赖 然后创建一个upload.jsp文件...
    99+
    2022-11-12
  • SpringBoot如何实现文件上传功能
    这篇文章主要介绍了SpringBoot如何实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。经典的文件上传服务器处理上传文件一般都是先在请求中读取文件信息,然后改...
    99+
    2023-06-25
  • Vue实现文件上传和下载功能
    本文实例为大家分享了Vue实现文件上传和下载功能的具体代码,供大家参考,具体内容如下 1、a标签download属性 在H5中,为a标签新增了一个download属性,来直接文件的...
    99+
    2022-11-12
  • java实现ftp文件上传下载功能
    本文实例为大家分享了ftp实现文件上传下载的具体代码,供大家参考,具体内容如下package getUrlPic;import java.io.ByteArrayInputStream;import java.io.IOException;...
    99+
    2023-05-31
    ftp 上传 下载
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作