SpringMVC(四)—— 文件上传和下载

一、文件上传1.1 文件上传​ 在 Web 开发中,使用应用层协议 HTTP,通过在请求头中设置传输的内容类型 Content-Type 为 multipart/form-data; boundary=流分隔符值 来上传文件,这个流分隔符用来区分一个文件上传的开始和结束。<%-- 文件上传 表单提交的方式--%><%-- 文件上传的规范:enctype="multipart/form-data" method="post"--%><form enc
摘要由CSDN通过智能技术生成

一、文件上传

1.1 文件上传

​ 在 Web 开发中,使用应用层协议 HTTP,通过在请求头中设置传输的内容类型 Content-Type 为 multipart/form-data; boundary=流分隔符值 来上传文件,这个流分隔符用来区分一个文件上传的开始和结束。

在这里插入图片描述

<%--   文件上传 表单提交的方式--%>
<%-- 文件上传的规范:enctype="multipart/form-data" method="post"--%>
<form enctype="multipart/form-data" action="upload" method="post">
    选择上传的文件:<input type="file" name="file">
    <input type="submit" value="点击上传" id="btn1">
</form>

表单中的enctype 属性说明:

  • application/x-www=form-urlencoded:默认方式,只处理表单域中的 value 属性值,采用这种编码方式的表单会将表单域中的值处理成 URL 编码方式。
  • multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数中,不会对字符编码。
  • text/plain:除了把空格转换为 “+” 号外,其他字符都不做编码处理,这种方式适用直接通过表单发送邮件。
1.2 文件下载

通过在响应消息头中设置 Content-Disposition 和 Content-Type 使得浏览器无法使用某种方式或者激活某个程序来处理 MIME 类型的文件,来让浏览器提示是否保存文件,也就是文件的下载。

response.setHeader("content-disposition","attachment;filename="+filename);
response.setContentType("application/octet-stream");

二、SpringMVC中的文件上传与下载

前提:自己在本机配置一个虚拟目录

可以在tomcat的conf目录下面的server.xml中设置:

在文件的Host标签中设置虚拟目录:

<Context  path="/updatefile"  docBase="E:\tomcat_test_uploadAndupdown" reloadable="true"/>

属性说明:

代码说明
元素,用于将本地文件系统中的一个目录,映射成一个可供Web浏览器访问的虚拟根目录

path属性 用于指定Web应用的虚拟路径
docBase属性 用于指定该虚拟路径,所映射到的本地文件系统目录
reloadable 如果设置为true,则tomcat服务器在运行时,会监视WEB-INF/classes和WEB-INF/lib目录下类的改变

详细可参考:

2.1 文件表单上传
1.配置文件上传解析器,限制上传文件的大小
 <bean id="multipartResolver" class="com.gx.CommonsMultipartResolverPlus.PlusCommonsMultipartResolver">
</bean>

这个拦截器可以对上传文件进行一些限定:比如设置编码,设置文件上传的大小

	 <!--设置请求编码-->
	 <property name="defaultEncoding" value="UTF-8"/>
    <property name="uploadTempDir" value="WEB-INF/tmp"/>
    <!--设置允许单个上传文件的最大值,不要在这里配置-->
    <!--<property name="maxUploadSizePerFile" value="31457280"/>-->
    <!--延迟解析,在Controller中抛出异常-->
	<property name="resolveLazily" value="true"/>

当文件上传大小出现异常的时候,设置resolveLazily属性为true,在拦截器中对文件上传进行限制,拦截器抛出异常,在Controller中获取异常,进行处理。

拦截器限制文件的大小(这里只写了一个preHandle方法):

public class FileUploadInterceptor implements HandlerInterceptor {
   
    private long maxSize;

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
   
        if (httpServletRequest != null && ServletFileUpload.isMultipartContent(httpServletRequest)) {
   
            ServletRequestContext servletRequestContext = new ServletRequestContext(httpServletRequest);
            long requestSize = servletRequestContext
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值