SpringMVC入门之九:multipart文件上传

处理Multipart形式的数据

SpringMVC以multipart形式来上传文件。在编写控制器方法处理文件上传之前,我们必须要配置一个multipart解析器,通过它来告诉DispatcherServlet该如何读取multipart。

配置multipart解析器

DispatcherServlet并没有实现任何解析multipart请求数据的功能。它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过这些实现类来解析multipart请求中的内容。从Spring3.1开始,Spring内置了两个MultipartResolver的实现供我们选择:

  • a、CommonsMultipartResolver:使用Jakarta Commons FileUpload解析multipart请求;

  • b、StandardServletMultipartResolver:依赖于Servet3.0对mutipart请求的支持(始于Spring3.1)。
    一般来说,StandardServletMultipartResolver会是优先选择的方案。它使用Servlet所提供的功能支持,并不需要依赖任何其他的项目。

使用Servlet3.0解析multipart请求

在Spring应用上下文中,声明StandardServletMultipartResolver非常简单:

@Bean
public MultipartResolver multipartResolver() throws IOException{
    return new StandardServletMultipartResolver();
}

如果我们想要限制用户上传文件的大小或指定写入目录的话应该怎么设置呢?因为没有属性和构造器参数,StandardServletMultipartResolver本身没办法完成配置工作,而是需要在Servlet中指定multipart的配置。具体来讲,我们需要在web.xml或Servlet初始化类中,将multipart的具体细节作为DispatcherServlet配置的一部分。
如果我们采用Servlet初始化类,并且初始化类继承了AbstractAnnotationConfigDispatcherServletInitializer或AbstractDispatcherServletInitializr的话,那我们可以通过重载customizeRegistration()方法(它会得到一个Dynamic作为参数)来配置multipart的具体细节:

@Override
protectd void customizeRegistration(Dynamic registration){
    registration.setMultipartConfig(new multipartConfigElement("/tmp/spittr/uploads"));
}

我们还可以通过其他构造器来限制文件上产大小等如下参数:

  • a、上传文件的最大容量(以字节为单位)。默认是没有限制的。

  • b、整个multipart请求的最大容量(已字节为单位),不会关心有多少个part以及每个part的大小。默认是没有限制的。

  • c、在上传过程中,如果文件大小达到了一个指定最大容量(已字节为单位),将会写入到临时文件路径中。默认值为0,也就是所有上传的文件都会写入到磁盘上。

下面是一个限制文件大小为2MB、整个请求不超过4MB,而且所有文件都要写到磁盘中的示例:

@Override
protected void customizeRegistrat
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值