springmvc文件上传
文件的上传和下载是项目中最最常用也是最基础的功能。在springmvc中对文件的上传下载提供了很好的支持。
多数的文件上传都是通过表单形式提交给后台服务器进行处理的。因此要完成文件的上传需要提供一个表单并且该表单需要满足如下三个条件:
- form表单的method属性设置为post;
- form表单的enctype属性设置为multipart/form-data;
- 提供
<input type="file" name="file" />
的文件上传输入框。
文件上传表单示例如下:
<form action="uploadfile" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple="multiple"/>
<input type="submit" value="上传"/>
</form>
除了满足文件基本的3个条件之外,这里还多了一个multiple
属性,该属性是html5中的新属性,如果使用了它表示支持多个文件上传。
当客户端的form表单的enctype属性为multipart/form-data时,浏览器就会采用二进制流的方式来处理表单数据,服务器端就会对文件上传的请求进行解析处理。springmvc对文件上传提供了直接的支持,这种支持是通过MultipartResolver(多部件解析器)对象实现的,MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipartResolver来完成文件上传工作。在springmvc中使用MultipartResolver对象是比较简单的,只需要在配置文件中定义MultipartResolver接口的bean即可。如下定义所示:
<!-- 配置多媒体文件解析器 用于文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB,单位是字节 -->
<property name="maxUploadSize" value="5242880" />
<!-- 设置请求编码格式为uft-8 -->
<property name="defaultEncoding" value="utf-8" />
</bean>
CommonsMultipartResolver常用的属性有如下几个:
- maxUploadSize:设置上传文件的大小限制(单位为字节);
- defaultEncoding:默认的编码格式;
- maxInMemorySize:缓存中的最大尺寸;
- resolveLazily:推迟文件解析,以便在controller中捕获文件大小异常。
需要注意的是:因为MultipartResolver接口的实现类CommonsMultipartResolver内部是引用MultipartResolver字符串获取该实现类对象并完成文件解析的,所以在配置CommonsMultipartResolver时必须指定该bean的id为multipartResolver 。
文件上传需要的jar是如下两个:在使用时只需要引入项目中即可
- commons-fileupload-xxx.jar
- commons-io-xxx.jar
文件上传后台接口实例如下:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class UpFile {
/**
*
* @param name 上传人姓名
* @param file 上传的文件
* @return 上传成功
*/
public String handleFormUploadFile(@RequestParam("name") String name, @RequestParam("filename")MultipartFile file){
//执行具体的逻辑处理
return "success";
}
}
在以上代码中,包含了一个MultipartFile接口类型的参数file,上传到程序中的文件就是封装在file参数中的。之后就可以对上传的文件进行相应的处理。
MultipartFile接口中的主要方法如下表所示
方法 | 说明 |
---|---|
byte[] getBytes() throws IOException; | 以字节数组的形式返回文件的内容 |
String getContentType(); | 返回文件的内容类型 |
InputStream getInputStream() throws IOException; | 读取文件内容,返回一个InputStream流 |
String getName(); | 获取多部件form表单的参数名称 |
String getOriginalFilename(); | 获取上传文件的源名称 |
long getSize(); | 获取上传文件的大小,单位是字节 |
boolean isEmpty(); | 判断上传文件是否为空 |
void transferTo(File dest) throws IOException, IllegalStateException; | 将上传文件保存到目标目录下 |
以上就是springmvc上传的内容。