Spring上传组件的使用

来源:互联网 发布:2017盒子免费视频软件 编辑:程序博客网 时间:2024/04/30 07:36

一.Spring支持web应用中的分段文件上传。这种支持是由即插即用的MultipartResolver来实现。这些解析器都定义在org.springframework.web.multipart包里。首先我们要在bean的配置文件里配置上传组件包的使用:<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!—这里name属性的值定义的是我们上传文件允许的最大值-->
    <property name="maxUploadSize" value="100000"/>
</bean>
当然你需要在classpath中为分段文件解析器提供正确的jar文件。如果是CommonsMultipartResolver,你需要使用commons-fileupload.jar,如果是CosMultipartResolver,则使用cos.jar
SpringDispatcherServlet发现文件上传请求时,它会激活定义在上下文中的解析器来处理请求。这个解析器随后是将当前的HttpServletRequest封装成MultipartHttpServletRequest,后者支持分段文件上传。使用MultipartHttpServletRequest,你可以获取请求所包含的上传信息,甚至可以在控制器中获取分段文件的内容。
二.表单的处理:
<html>
    <head>
        <title>Upload a file please</title>
    </head>
    <body>
        <h1>Please upload a file</h1>
        <form method="post" action="upload.form" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit"/>
        </form>
    </body>
</html>
在上面这个表单里有一个input元素,这个元素的名字(“file”)和服务器端处理这个表单的bean(在下面将会提到)中类型为byte[]的属性名相同。 在这个表单里我们也声明了编码参数(enctype="multipart/form-data")以便让浏览器知道如何对这个文件上传表单进行编码(千万不要忘记这么做!)
一.  属性注册器的配置:
和其它不能自动转为字符串类型或者基本类型(primitive type)的属性一样,为了将上传的二进制数据存成bean的属性,你必须通过ServletRequestDatabinder注册一个属性编辑器。Spring中内置了几个这样的编辑器,它们可以处理文件,然后将结果存成bean的属性。比如,StringMultipartEditor可以将文件转换成一个字符串(使用用户声明的字符集)ByteArrayMultipartEditor可以以将文件转换为byte数组。他们的功能和CustomDateEditor相似。 
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder)
        throws ServletException {
        binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
    }
五.我们定义一个接受文件的JavaBean对象存储文件,这样以来你从前面接受来的上传文件可以任意操作,对于上传一个文件照上面的配置应该没有什么问题,如多是上传一个图片,那要把和视图中上传文件的属性名的类型改为MultipartFile 类型,这样就不存在什么类型的转换了,自然也就不需要什么属性编辑器了。