SpringMVC深入讲解文件的上传下载实现

目录
  • SpringMVC文件下载
  • SpringMVC文件上传
    • 1.基本介绍
    • 2.需求分析/图解
    • 3.应用实例
    • 4.Debug-file.transferTo(目标文件)

SpringMVC文件下载

说明: 在 SpringMVC 中,通过返回 ResponseEntity的类型,可以实现文件下载的功能

案例演示

1.修改 json.jsp

<h1>下载文件的测试 </h1>
<a href="<%=request.getContextPath()%>/downFile" rel="external nofollow" >点击下载文件</a>

​ 2.修改 JsonHandler.java, 增加方法

    /**
     * 响应用户下载文件的请求
     */
    @RequestMapping(value = "/downFile")
    public ResponseEntity<byte[]> downFile(HttpSession session)
            throws Exception {
        //C:\ide\IdeaProjects\llp-springmvc\out\artifacts\llp_springmvc_war_exploded\img
        //获取文文件真实运行的目录
//        String realPath = session.getServletContext().getRealPath("/img");
        //1. 先获取到下载文件的inputStream
        InputStream resourceAsStream =
                session.getServletContext().getResourceAsStream("/img/2.jpg");
        //2. 开辟一个存放文件的byte数组, 这里老师使用byte[] 是可以支持二进制数据(图片,视频。)
        byte[] bytes = new byte[resourceAsStream.available()];
        //3. 将下载文件的数据,读入到byte[]
        resourceAsStream.read(bytes);
        //4.添加Header头
        HttpHeaders httpHeaders = new HttpHeaders();
        //指定返回的数据,客户端应当以附件形式处理 一般有两种方式: inline:直接在页面显示 attchment:以附件形式下载
        httpHeaders.add("Content-Disposition", "attachment;filename=2.jpg");
        //5.返回的HttpStatus
        return new ResponseEntity<>(httpHeaders, HttpStatus.OK);
    }

​ 3.在web目录放入img图片

文件下载响应头的设置 content-type 指示响应内容的格式 content-disposition 指示如何处理响应内容。

一般有两种方式: inline:直接在页面显示 attchment:以附件形式下载

SpringMVC文件上传

1.基本介绍

基本介绍

  • Spring MVC 为 文 件 上 传 提 供 了 直 接 的 支 持 , 这 种 支 持 是 通 过 即 插 即 用 的 MultipartResolver 实 现 的 。 Spring 用 Jakarta Commons FileUpload 技 术 实 现 了 一 个 MultipartResolver 实现类:CommonsMultipartResovler
  • Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的 上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 MultipartResolver
    <!--配置文件上传需要的bean,这里id不能乱写,CommonsMultipartResolver是MultipartResolver接口的实现类,底层是按照接口来装配的-->
    <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
          id="multipartResolver"/>

2.需求分析/图解

3.应用实例

引入 springmvc 文件上传需要的 jar 包

创建 \web\fileUpload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<h1>文件上传的演示</h1>
<%--
这里action有两种填写方式,
第一种:获取当前工程路径 /springmvc/fileupload 这里第一个斜杠在浏览器端会被解析成ip:port ===》 ip:port/springmvc/fileupload
action=<%=request.getContextPath()%>/fileUpload
action=fileUpload  我们通过 http://localhost:8080/springmvc/fileUpload.jsp页面提交发起请求,如果不填写斜杠,
会将fileupload拼接到  http://localhost:8080/springmvc/后面
--%>
<form action="<%=request.getContextPath()%>/fileUpload" method="post" enctype="multipart/form-data">
    文件介绍:<input type="text" name="introduce"><br>
    选择文件:<input type="file" name="file"><br>
    <input type="submit" value="上传文件">
</form>
</body>
</html>

创建FileUploadHandler.java

@Controller
public class FileUploadHandler {
    /**
     * 文件上传
     * @param file 客户端上传的文件
     * @param request 这里在目标方法添加HttpServletRequest 主要是为了将文件保存到工程路径中
     * @return
     */
    @RequestMapping(value = "/fileUpload")
    public String fileUpload(@RequestParam(value = "file") MultipartFile file,
                             HttpServletRequest request, String introduce) throws IOException {
        //接收到提交的文件名
        String originalFilename = file.getOriginalFilename();
        System.out.println("你上传的文件名= " + originalFilename);
        System.out.println("introduce=" + introduce);
        //得到要把上传文件保存到哪个路径[全路径:包括文件名]
        String fileFullPath =
                request.getServletContext().getRealPath("/img/" + originalFilename);
        //创建目标文件
        File saveToFile = new File(fileFullPath);
        //将上传的文件,转存到saveToFile(目标文件:我们希望文件存放的位置)
        file.transferTo(saveToFile);
        return "success";
    }
}

浏览器测试

PostMan测试

4.Debug-file.transferTo(目标文件)

transferTo函数会将客户端文件写入到临时文件中,C:\Users\asus\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\Unnamed_llp-springmvc\work\Catalina\localhost\springmvc\upload_6889b5a3_a1f5_4bba_a16e_a8dc15b12b87_00000001.tmp

在将文件写入到目标文件

在实际开发中我们可以将文件写入到服务器的目录中,通过nginx对文件进行映射,这样在浏览器中就可以正常的显示我们上传的文件了

到此这篇关于SpringMVC深入讲解文件的上传下载实现的文章就介绍到这了,更多相关SpringMVC上传下载内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringMVC实现文件上传下载的全过程

    目录 前言 一.通用配置 二.实现文件下载,上传功能 总结 前言 文件的上传和下载都是基于io复制,只不过 文件上传是浏览器向服务器发送报文 文件下载是服务器向浏览器发送报文 提示:以下是本篇文章正文内容,下面案例可供参考 一.通用配置 pom.xml <dependencies> <!-- SpringMVC --> <dependency> <groupId>org.springframework</groupId> <artifact

  • springmvc模式的上传和下载实现解析

    这篇文章主要介绍了springmvc模式下的上传和下载实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 此处上传的功能依旧是采用表格上传.文件格式依旧是 <form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data"> 后台则是 @Reque

  • SpringMVC实现文件上传与下载

    本文实例为大家分享了SpringMVC实现文件上传与下载的具体代码,供大家参考,具体内容如下 0.环境准备 1.maven依赖 <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.7.0</version> <scope&

  • SpringMVC实现文件上传下载功能

    目录 导入需要的依赖包 一.单个文件上传 二.多个文件上传 三.上传文件列表显示 四.文件下载 今天遇到文件上传的问题,使用Ajax方式进行提交,服务器一直报错The current request is not a multipart request,看了网上很多方法,最后才找到,我在表单提交的时候使用了序列化$('#postForm').serialize(),但是这种方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的.所以一直在报错.后来就直接使用submint(),放弃使用

  • springMVC实现文件上传和下载

    本文实例为大家分享了springMVC实现文件上传和下载的具体代码,供大家参考,具体内容如下 1准备工作 web.xml文件导入DispatcherServlet,CharacterEncodingFilter <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet

  • SpringMVC实现文件上传与下载、拦截器、异常处理器等功能

    目录 文件下载 文件上传 拦截器 拦截器的配置 多个拦截器的执行顺序 异常处理器 基于配置的异常处理 基于注解的异常处理 总结 文件下载 使用ResponseEntity实现下载文件的功能 index.html <!DOCTYPE html> <html lang="en" xmlns:th="http:www.thymeleaf.org"> <head> <meta charset="UTF-8">

  • 了解SpringMVC的上传和下载

    目录 springmvc.xml的配置 web.xml的配置 主要代码 NewFile.jsp success.jsp 总结 springmvc.xml的配置 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springfr

  • SpringMVC基于注解方式实现上传下载

    目录 一.文件下载 1-1.servlet原生方式下载 1-2.使用ResponseEntity实现下载 二.文件上传 2-1.添加commons-fileupload依赖 2-2.配置spring.xml注入CommonsMultipartResolver文件上传解析器 2-3.文件上传 一.文件下载 1-1.servlet原生方式下载 /**  * 基于servlet api的文件下载  */ @RequestMapping("/download") public String d

  • SpringMVC实现文件上传和下载的工具类

    本文主要目的是记录自己基于SpringMVC实现的文件上传和下载的工具类的编写,代码经过测试可以直接运行在以后的项目中. 开发的主要思路是对上传和下载文件进行抽象,把上传和下载的核心功能抽取出来分装成类. 我的工具类具体代码如下: package com.baosight.utils; import java.io.BufferedInputStream; import java.io.File; import java.io.FileNotFoundException; import java

  • SpringMVC深入讲解文件的上传下载实现

    目录 SpringMVC文件下载 SpringMVC文件上传 1.基本介绍 2.需求分析/图解 3.应用实例 4.Debug-file.transferTo(目标文件) SpringMVC文件下载 说明: 在 SpringMVC 中,通过返回 ResponseEntity的类型,可以实现文件下载的功能 案例演示 1.修改 json.jsp <h1>下载文件的测试 </h1> <a href="<%=request.getContextPath()%>/d

  • SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    今天做了文件的上传下载,小小总结一下,基本的web项目建立及SpringMVC框架搭建此处不详细写出来了. 上传form: <form id="uploadfiles" enctype="multipart/form-data"> <input type="file" multiple="multiple" id="file_upload" name="file_upload&q

  • SocketIo+SpringMvc实现文件的上传下载功能

    socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址: https://github.com/fengcharly/sockeio-springMvcUpload.git 部分代码如下: 服务端的代码: ChuanServer: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.c

  • 使用HttpClient实现文件的上传下载方法

    1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源. 虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活.HttpClient 用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议. 一般的情况下我们都是使用Chrome或者

  • Java实现七牛云文件图片上传下载

    目录 一.准备工作 1.1.为什么选择七牛云? 1.2.七牛云注册 二.java操作七牛云对象存储下载 2.1.pom.xml引入依赖 2.2.上传下载具体代码 三.具体业务例子(七牛云做图片服务器–SpringBoot) 四.总结 一.准备工作 1.1.为什么选择七牛云? 免费 免费 免费 而且注册之后每个月 有免费100 万 次get请求. 10G免费空间,10G免费流量,对于搭建自己的博客网站已经绰绰有余了. 1.2.七牛云注册 注册七牛云账号 获取自己的AK,SK: 二.java操作七牛

  • 前端vue+express实现文件的上传下载示例

    新建server.js yarn init -y yarn add express nodemon -D var express = require("express"); const fs = require("fs"); var path = require("path"); const multer = require("multer"); //指定路径的 var app = express(); app.use(exp

  • Asp.net实现MVC处理文件的上传下载功能实例教程

    上传于下载功能是程序设计中非常常见的一个功能,在ASP.NET程序开发中有着非常广泛的应用.本文就以实例形式来实现这一功能. 一.概述 如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个,而这个控件的缺席给我们带来一些小问题.这篇文章主要说如何在Asp.net MVC中上传文件,然后如何再从服务器中把上传过的文件下载下来. 二.实现方法 1.文件上传

  • SpringMVC实现文件的上传和下载实例代码

    前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流".我回复他说:"使用SpringMVC框架可以做到这一点,因为SpringMVC为文件的上传提供了直接的支持,但需要依赖Apache提供Commons FileUpload组件jar包."鉴于这个问题,我上网也百度了一下,网上很多都是介绍的使用IO流来实现文件的上传和下载,也有说到框架的,但介绍的并不是很完整,今天小钱将和大家介绍使用Spr

  • 利用ssh实现服务器文件上传下载

    通过ssh实现服务器文件上传下载 写在前面的话 之前记录过一篇使用apache的FTP开源组件实现服务器文件上传下载的方法,但是后来发现在删除的时候会有些权限问题,导致无法删除服务器上的文件.虽然在Windows上使用FileZilla Server设置读写权限后没问题,但是在服务器端还是有些不好用. 因为自己需要实现资源管理功能,除了单文件的FastDFS存储之外,一些特定资源的存储还是打算暂时存放服务器上,项目组同事说后面不会专门在服务器上开FTP服务,于是改成了sftp方式进行操作. 这个

随机推荐