资讯专栏INFORMATION COLUMN

7.1、使用Commons Fileupload上传文件

suosuopuo / 2135人阅读

摘要:你可以通过在应用程序上下文中添加一个解析器来启用的处理。当的检测到一个请求时,它会激活你声明好的解析器,然后把这个解析器转交给请求。解析器会把当前的扭曲为一个支持文件上传的。首先,创建一个带有的表单,这样用户就可以通过这个表单上传文件了。

  最近家里的网出现了莫名其妙的问题,连不上码云了,所以把示例迁到了 github 上。本示例见这个项目的 master 分支的 ZestMultipartController.java。

  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 属性啦。

和 Commons FileUpload 一起使用MultipartResolver

  下面的例子展示了怎样使用CommonsMultipartResolver,快来看看吧:


    
    
    

  当然啦,你也需要在类路径下放上合适的 Jar 文件来保证 multipart 解析器工作。对于上面的例子嘞,你需要使用 commons-fileupload.jar。
  当 Spring 的DispatcherServlet检测到一个 multi-part 请求时,它会激活你声明好的解析器,然后把这个解析器转交给请求。解析器会把当前的HttpServletRequest扭曲(wrap?)为 一个支持 multipart 文件上传的MultipartHttpServletRequest。使用这个MultipartHttpServletRequest,你就可以获取这个请求中的 multipart 的信息了, 同时也可以在你的控制器中访问这些 multipart 文件。

在表单中处理文件上传

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


    
        Upload a file please
    
    
        

Please upload a file

  下一步是创建一个控制器来处理文件上传。这个控制器和之前那种正常的控制器很像,不过我们在方法参数上使用MultipartHttpServletRequestMultipartFile

@Controller
public class FileUploadController 
{
    @PostMapping("/form")
    public String handleFormUpload(@RequestParam("name") String name, 
                                   @RequestParam("file") MultipartFile file) 
    {
        if (!file.isEmpty()) 
        {
            byte[] bytes = file.getBytes();
            // store the bytes somewhere
            return "redirect:uploadSuccess";
        }
        return "redirect:uploadFailure";
    }
}

  注意@RequestParam方法参数是怎样映射到表单的 input 元素中的。在这个例子中,并没有使用byte[]做任何事,但是在实践中,你可以把它保存到数据库中,也可以保存到文件系统上等,随你咯。

上传文件之后不进行页面跳转

  有时,想在上传完页面之后,页面还保持在这里,不去跳转。这时,可以借助 ···

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

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

相关文章

  • 使用commons-fileupload时,文件上传与表单参数同时提交时的后台代码处理

    摘要:把表单是的是基于流的,只能获取一次,重复获取将为空当上传文件的控件与的字段混合时直接用一般是不行的下面的代码进行同时表单参数获取和文件上传这里取得字段名称如果已经存在此字段信息多选列表或多个同名的隐藏域等第一次取到这个名的字段这里而要对文 把Form表单是的enctype=multipart/form-data是基于流的,只能获取一次,重复获取将为空,当上传文件的input控件与hid...

    JinB 评论0 收藏0
  • 通用文件服务组件(HTTP实现版本)

    摘要:上篇文章介绍了通用文件服务组件实现版本,本文介绍基于与的方式实现。根据官网信息可知,它是一个高性能,可为我们的应用提供文件上传服务的组件。程序可通过该对象获取服务器的响应内容。 上篇文章介绍了通用文件服务组件(Netty实现版本),本文介绍基于HTTP与Apache FileUpload的方式实现。代码地址:https://github.com/landy8530/... 1. 实现...

    TANKING 评论0 收藏0
  • JavaWEB开发17——文件上传与下载

    摘要:文件上传解析请求正文的每部分的内容。获取上传文件的大小获取上传文件对应的输入流把上传的文件保存到指定文件中。如果上传的文件超过,用磁盘作为缓存。如果自己用流实现的文件上传,要在流关闭后,清理临时文件。 一、文件的上传和下载1、文件上传的原理分析1.1文件上传的必要前提:a、提供form表单,method必须是postb、form表单的enctype必须是multipart/form-d...

    Tangpj 评论0 收藏0
  • Java 导入与导出

    摘要:导入导出上传前提准备个包准备上传页面同步上传文件上传上传用户上传文件上传文件提交异步上传通过上传组件上传处理类这里用一句话描述这个类的作用孤傲苍狼下午得到上传文件的保存目录,将上传的文件存放于目录下,不允许外界直接访问,保 Java 导入 showImg(https://segmentfault.com/img/bVbkgn4?w=424&h=219); Java 导出 showImg...

    zsy888 评论0 收藏0
  • Apache Commons工具包

    摘要:但是集合框架专门有一个工具包对它们进行了扩展。是为了方便对的操作的工具包。如下实例你好你好是用于处理文件上传的工具包。 commons-lang  commons-lang为java核心类提供额外的方法。比如为Date类型提供addDays(),addHours操作,为String类提供isBlank(),isEmpty()操作。但是java集合框架专门有一个工具包commons-co...

    wangshijun 评论0 收藏0

发表评论

0条评论

suosuopuo

|高级讲师

TA的文章

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