3.6 SpringMVC框架 --文件上传与文件下载

1.SpringMVC框架中的文件上传

1.1 首先来看看前端JSP页面,文件上传的form表单,文件输入框写法:

其中:
  form表单至少需要设置两个属性:
  method属性为post;
  enctype属性为multipart/form-data(设置为该属性后,浏览器会用二进制流来处理表单数据);

文件上传框:
  input元素的type为“file”;
    name为“filename”;
    multiple属性为 multiple(multiple属性是HTML5中新属性,可支持多文件上传)
在这里插入图片描述

1.2 服务端文件上传配置:

(1)引入依赖:
  SpringMVC框架中的文件上传解析,是利用MultipleResolver接口的实现类CommonsMultipartResolver 来实现的,所以,首先要在项目的pom.xml文件中引入相关的两个依赖包:

  commons-fileupload-1.3.2.jar

  commons-io-2.5.jar

在这里插入图片描述

(2)配置 CommonsMultipartResolver:
  同时需要在web.xml中指定的SpringMVC配置文件中配置CommonsMultipartResolver 类(因该类是通过引用multipartResolver字符串获取该类对象并完成初始化的,所以配置CommonsMultipartResolver 必须指定该bean的id为multipartResolver
在这里插入图片描述
  其中, 通过 defaultEncoding 属性,设置的编码格式为 UTF-8,该编码格式必须与JSP页面中的pageEncoding属性一致!!!

(3)编写文件解析的控制器

  需要通过 @RequestParam 注解 将前端传递参数绑定到处理方法的形参上;
在这里插入图片描述

最后,是整个文件上传的demo:

在这里插入图片描述


2.SpringMVC中的文件下载

2.1 前端JSP页面利用 a 标签 发送文件下载请求:

<a href="${pageContext.request.contextPath }/download?filename=1.jpg">
    <%--文件下载--%>
</a>
2.2 在服务端的SpringMVC框架中 通过 ResponseEntity 对象,来设置HttpHeaders、HttpStatus对象,配置下载文件所需要的信息:

在这里插入图片描述
  其中,对HttpHeaders的设置中,MediaType.APPLICATION_OCTET_STREAM的值为application/octet-stream,表示以二进制流形式下载数据


  对于非中文命名的文件,上述文件下载即可;但是对于中文命名的文件下载,由于不同浏览器的转码机制不同,就是出现乱码、解析失败的情况,所以需要单独配置中文转码:

  (1)前端页面发送请求前,需要对中文统一编码(利用Encoder类的encoder方法对中文编码);

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
         
<%@page import="java.net.URLEncoder"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>下载页面</title>
</head>
  <body>
    <a href="${pageContext.request.contextPath }/download?   filename=<%= URLEncoder.encode("壁纸.jpg", "UTF-8")%>">
       中文名称文件下载
    </a>
  </body>
</html>

  (2)后台控制器中对中文名称进行解码;

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值