在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>