SpringMVC学习之上传文件

来源:互联网 发布:java项目开发实战案例 编辑:程序博客网 时间:2024/06/05 09:04

在SpringMVC中处理文件上传有两种方法:

1.购买Apache Commons FileUpload元件

2.利用servlet3.0及其更高版本的内置支持

一.客户端编程

为了上传文件,必须在HTML表格的enctype属性值设为multipart/form-data,如:

<form action = "action" method = "post" enctype="multipart/form-data">

      Select a file<input  type="file"  name="fieldName" />

<input type="button" value="Upload" />

</form>

表格中必须包含类型为file的一个input元素,它会显示成一个按钮,点击时,它会打开一个对话框,用来选择文件,表格中也包含其他字段.

在HTML5中通过在input中引入多个multiple属性,可以上传多个文件,编写如下任意一个,就可以生成一个按钮供选择多个文件:

<input type="file" name="fileName"  multiple=""  />

<input type="file" name="fileName"  multiple="multiple"  />

<input type="file" name="fileName"  multiple />

二.MultipartFile接口

SpringMVC中处理已将上传的文件十分容易,上传到SpringMVC应用程序的问价会包在一个MultipartFile对象中,用类型为MultipartFile的属性编写一个domain类

org.springframework.web.multipart.MultipartFile接口的方法:

byte[] getBytes()   以字节数组的形式返回文件的内容

String getContentType()    返回文件的内容类型

InputStream  getInputStream()  返回一个InputStream 从中读取文件的内容

String getName()  以多部分的形式返回参数的名称

long getSize()     以字节为单位文件的大小

String getOriginalFilename()   返回客户端本地驱动器的初始文件名

boolean  isEmpty()     表示被上传的文件是否为空

void  transferTo(File destination)  将上传的文件保存到目标目录下

三.用Commons FileUpload上传文件

对于低于Servlet3.0的版本,需要使用Apache Commons FileUpload元件

下载地址:http://commons.apache.org/proper/commons-fileupload/

还需要另一个Apache Commons元件:Apache Commons IO

下载地址:http://commons.apache.org/proper/commons-io/


在SpringMVC的配置文件中作如下配置:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

</bean>

四:用Servlet3.0 及更高版本上传文件(不需要上述的两个元件)

围绕着标注为MultipartCofig和javax.servlet.http.Part接口进行的,处理上传文件的Servlets必须以@MultipartConfig进行标注

在MultipartConfig标注类型中出现的属性,都是可选的:

1.maxFileSize :上传文件的最大容量,默认为-1,没有限制.大于指定值的文件会遭到拒绝.

2.maxRequestSize:表示多部分HTTP请求允许的醉倒容量,默认值-1,没有限制.

3.location:表示在Part调用write方法时,要将已经上传的文件保存到磁盘中的位置

4.fileSizeThreshold:上传文件超过这个容量界限时,会被写入磁盘


在Servlet3中通过对部署描述符(web.xml)中的Servlet进行声明赋值,可以起到和@MultipartConfig相同的作用,如下:

<servlet>  <servlet-name>springmvc</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param>    <param-name>contextConfigLocation</param-name>    <param-value>/WEB-INF/springmvc-config.xml</param-value>  </init-param><multipart-config>     <max-file-size>20848820<max-file-size>    <max-request-size>418018841</max-request-size>    <file-size-threshold>1046520</file-size-threshold></multipart-config> </servlet><servlet-mapping>  <servlet-name>springmvc</servlet-name>  <url-pattern>/</url-pattern></servlet-mapping>
在SpringMVC配置文件中进行如下配置:

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver">

</bean>