资讯专栏INFORMATION COLUMN

7.2、使用基于 Servlet 3.0 的文件上传

KevinYan / 548人阅读

摘要:本文示例见这个项目的分支下的项目这个项目是为本文多带带建立的。的内置支持用于处理应用程序中的文件上传。提供了一个的实现,使用了的和一些其他的东西,用于对的请求的解析。首先,创建一个带有的表单,这样用户就可以通过这个表单上传文件了。

  本文示例见这个项目的 upload 分支下的项目(这个项目是为本文多带带建立的)。

  WARNING:本文中有一部分直接把英文原文搬过来了,我的翻译能力实在有限,凑合看吧。

  Spring 的内置 multipart 支持用于处理 Web 应用程序中的文件上传。你可以通过使用插件化的MultipartResolver对象来启用 multipart 支持,它定义在包org.springframework.web.multipart中。Spring 提供了一个MultipartResolver的实现,使用了 Apache 的 Commons FileUpload 和一些其他的东西,用于对 Servlet 3.0 的 multipart 请求的解析。

  默认地,Spring 不进行 multipart 处理,因为很多开发者想要自己处理。你可以通过在 Web 应用程序上下文中添加一个 multipart 解析器来启用 Spring 的 multipart 处理。每一个请求都要被检查,看看是否包含一个 multipart。如果没有发现 multipart,请求就正常继续啦;如果有的话,你在上下文中声明的MultipartResolver就会开始工作啦。之后嘞,你就可以像访问其他请求属性那样访问 multipart 属性啦。

和Servlet 3.0一起使用MultipartResolver

  为了使用基于 multipart 解析(parse)的 Servlet 3.0,你可以在DispatcherServlet上加个标记,这个标记可以是 web.xml 中的一个“multipart-config”片段,也可以是一个在编程 Servlet注册中的 MultipartConfigElement(or with a javax.servlet.MultipartConfigElement in programmatic Servlet registration),or in case of a custom Servlet class possibly with a javax.servlet.annotation.MultipartConfig annotation on your Servlet class。配置设置如文件最大长度或者存储路径需要应用在 Serlvet 注册级别,因为 Servlet 3.0 不允许从MultipartResolver完成这些设置。

  一旦你通过上面的任意一种方式启用了 Servlet 3.0 的 multipart解析,你需要添加StandardServletMultipartResolver`到你的 Spring 配置中:



配置 web.xml 文件

  这里使用。如下:

......

    Spring MVC 核心 Servlet
    dispatcher
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        
    
    
        52428800
        52428800
        0
    
    1

......
在表单中处理文件上传

  在MultipartResolver完成自己的工作之后,你就可以像处理其他请求那样处理当前请求了。首先,创建一个带有的表单,这样用户就可以通过这个表单上传文件了。为表单添加编码属性 (enctype="multipart/form-data") 来让浏览器直到把表单编码为 multipart 请求:


    
        Upload a file please
    
    
        

Please upload a file

配置处理上传文件的控制器

  在使用 Servlet 3.0 的 multipart 解析时,你也可以使用javax.servlet.http.Part来作为方法参数:

@Controller
public class FileUploadController 
{
    @PostMapping("/form")
    public String handleFormUpload(
            @RequestParam("name") String name, 
            @RequestParam("file") Part file) 
    {
        InputStream inputStream = file.getInputStream();
        // store bytes from uploaded file somewhere
        return "redirect:uploadSuccess";
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65259.html

相关文章

  • Spring之旅第十站:MVC配置、上传文件、异常处理、跨重定向请求、为控制器添加通知

    摘要:依赖于对请求的支持。使用解析兼容的没有构造器参数,也没有要设置的参数,这样,在应用上下文中,将其声明为就会非常简单。默认是没有限制的整个请求的容量。 Spring MVC 高级的技术 本章内容: Spring MVC配置的替代方案 处理文件上传 在控制器中处理异常 使用flash属性 稍等还没结束 说明 如果你有幸能看到。后面的章节暂时不更新了,改变学习方式了。重要理解思想,这本书...

    leanote 评论0 收藏0
  • Servlet 3.1 Async IO分析

    摘要:于是提供了机制,使得从中读往里写变成异步动作。这是因为客户端的数据推送速度太慢了,容器先将收回,当容器发现可以读取到新数据的时候,再分配一个去读,如此循环直到全部读完为止。注意和不能同时使用。 Github地址 相关系列文章: Servlet 3.0 异步处理详解 Spring MVC异步处理的几种方式 Servlet Async Processing提供了一种异步请求处理的手段(...

    n7then 评论0 收藏0
  • springboot2.x文件上传

    摘要:项目抛出了个异常,。所以我们需要添加个转换器类这样就能够识别了总结感觉把文件上传所能遇到的坑全踩了个变,心累。 pom包的配置 org.springframework.boot spring-boot-starter-web 启动项类修改 /** * 防止文件大于10M时Tomcat连接重置 * * @return */ @Bean public T...

    ChristmasBoy 评论0 收藏0
  • Spring新功能

    摘要:新特性重要功能升级为了解决各种环境下如开发测试和生产选择不同配置的问题,引入了环境功能。这个消息模块支持的功能,同时提供了基于模板的方式发布消息是第一批支持特性的框架,比如它所支持的表达式。 Spring 3.1新特性 重要功能升级 为了解决各种环境下(如开发、测试和生产)选择不同配置的问题,Spring 3.1引入了环境profile功能。借助于profile,就能根据应用部署在什...

    baiy 评论0 收藏0
  • Spring MVC概念

    摘要:在中,就是前端控制器的任务是将请求发送给控制器。处理器映射会根据请求所携带的信息来进行决策一旦选择了合适的控制器,会将请求发送给选中的控制器。这些信息被称为模型。因此无需在配置类中显式声明任何的控制器具体来讲是试图解析器。 Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)模式实现,能够构建像Spring框架那样灵活和松耦合的Web应用程序...

    lindroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<