Spring MVC 文件上传功能详解

前言

在Spring MVC中实现文件上传功能并不复杂,前端使用HTML语法,后端使用特定抽象。参考Spring Boot相关文档即可。本文主要讲解常见资料忽略的两个问题:

  • 文件上传错误
  • 链接重置问题

版本:Spring Boot 1.5x

文件上传错误

一个关注点是如何处理文件上传期间发生的错误,错误主要分为两类:

  • IOException 文件读取或写入错误。
  • MultipartException 上传文件时,超过文件大小上限所触发的异常。

IOException

只需要在Controller层完成捕获和处理,处理方式可以是重定向并附带错误消息到提交页面。

MultipartException

如果文件大小超出设定允许的上限,将抛出该异常。MultipartException是Spring MVC的分派异常,其处理逻辑理应由HandlerExceptionResolver进行处理,如果未处理则交给Servlet容器处理。

默认会返回一个403页面:

实际DEBUG发现,默认情况下没有被Spring MVC层异常处理机制所处理,也未被Spring Boot的ErrorPage机制所处理。

尝试使用ErrorPage机制

默认情况Spring Boot注册了一个Global ErrorPage,它会处理所有未明确映射ErrorPage的异常和错误码。

你也可以添加自定义ErrorPage:

@Bean("mulitpartExceptionErrorPageRegistrar")
public ErrorPageRegistrar mulitpartExceptionErrorPageRegistrar(){
    return new ErrorPageRegistrar() {
       @Override
       public void registerErrorPages(ErrorPageRegistry registry) {
          registry.addErrorPages(new ErrorPage(MultipartException.class,"/uploadError"));
      }
    };
}

实际测试表明,这种机制无法处理MultipartException。

尝试使用Spring MVC异常处理机制

可以使用Controller Advice功能来实现:

@ControllerAdvice
public class FileSizeLimitMapper {
    @ExceptionHandler(MultipartException.class)
    public String handleUploadError(HttpServletRequest request){
        return "forward:/uploadError";
    }
}

这种方式能处理MultipartException。

链接重置问题

个人测试发现,当上传过大的文件时会出现连接重置问题。原因是因为根据HTTP协议,server只有接受完请求后才能返回响应,tomcat对一个连接单次请求可接收的最大字节数做了限制,超过限制将直接重置TCP链接。

原文地址:https://www.cnblogs.com/redreampt/p/10755050.html

时间: 2024-11-07 18:39:43

Spring MVC 文件上传功能详解的相关文章

iOS 的 Safari 文件上传功能详解

iOS 6 给 Safari 浏览器带来的另外一个功能是文件上传,终于 Safari 终于支持 input 输入框的文件类型了,并且还支持 HTML媒体捕获(HTML Media Capture). 上传单张图片或者视频 <input type="file"> 可以选择直接拍照或者摄影,也可以从相册中选取.选好之后,iOS 上的 Safari 和其他浏览器不同是它显示图片的截图,而不是图片的临时名称. 上传多张图片或者视频 如果你想一次上传多张图片,可以使用 HTML5 一

Spring MVC文件上传出现错误:Required MultipartFile parameter &#39;file&#39; is not present

1.配置文件上传的解析器 首先需要在spring mvc的配置文件中(注意是spring mvc的配置文件而不是spring的配置文件:applicationContext.xml)配置: springmvc-config.xml <!-- 文件上传bean--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartReso

spring mvc文件上传方法

spring mvc上传功能很强大. spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype="multipart/form-data" 这个是上传文件必须的2.applicationContext.xml中 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolv

Spring mvc 文件上传到文件夹(转载+心得)

spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationContext.xml中 <bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”/> 关于文件上传的配置不能少 applicationContext.xml

spring mvc 配置(xml配置详解)

如果您曾经使用Spring MVC框架开发过Web应用程序,本文提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例. Spring Framework(J2EE框架),Spring(Spring框架)下载 2013-08-26Spring Framework(J2EE框架) 3.2.4 2013-08-26Spring(Spring框架) 4.0.0.M2 web.xml 配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <s

spring mvc文件上传

1.配置spring mvc配置文件 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" valu

Spring MVC文件上传和下载

在Spring MVC中有两种实现上传文件的办法,第一种是Servlet3.0以下的版本通过commons-fileupload与commons-io完成的通用上传,第二种是Servlet3.0以上的版本的Spring内置标准上传,不需借助第3方组件.通用上传也兼容Servlet3.0以上的版本 Servlet3.0以下的通过commons-fileupload上传 1.添加上传依赖包 一个是文件上传的jar包,一个是其所依赖的IO包.这两个jar包,均在Spring支持库的org.apache

Spring mvc文件上传与下载

文件上传 SpringMVC实现文件上传,需要再添加两个jar包.一个是文件上传的jar包,一个是其所依赖的IO包.这两个jar包,均在Spring支持库的org.apache.commons中. 单文件上传 jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextP

Strut2 和Spring MVC 文件上传对比

在Java领域中,有两个常用的文件上传项目:一个是Apache组织Jakarta的Common-FileUpload组件 (http://commons.apache.org/proper/commons-fileupload/),另一个是Oreilly组织的COS框架的 (http://www.servlets.com/cos). 1.Struts2的文件上传 Struts2本身并没提供上传的组件,我们可以通过调用上传框架来实现文件的上传,struts2默认是jakarta作为其文件上传的解析