multipart/form-data编码方式支持基于表单的文件上传。
使用MultipartResolver进行文件上传的简单分析:
MultipartResolver的接口定义如下:
public interface MultipartResolver{
boolean isMultipart(HttpServletRequest request);
MultipartHttpsServletRequest resolverMultipart(HttpServletRequest request)throws MultipartException;
void cleanupMultipart(MultipartHttpServletRequest request);
}
SpringMVC框架内为MultipartResolver提供了两个可用的实现类,即org.springframework.web.multipartcommons.CommonsMultipartResolver
和org.springframework.web.multipart.cos.CosMultipartResolver。前者使用CommonsFileUpload类库实现,后者则使用Oreilly Cos类库实现
我们选择使用CommonsFileUpload进行文件上传,需要在DispatcherServlet的WebApplicationContext中添加bean定义如下:
但MultipartResolver返回MultipartHttpServlet给后继处理流程,并且后继处理流程中的组件也使用MultipartHttpServletRequest处理完相应的Web
请求,DispatcherServlet将保证调用MultipartResolver的CleanupMultipart()方法,释放处理文件上传过程中所占用的系统资源,这样,整个文件上传
的生命周期即告结束。
下面来介绍一下我实现的文件上传的例子
要实现文件上传,首先添加一个MultipartResolver的实例到DispatcherServlet的WebApplicationContext中。
public class FileUploadingCommand {
private byte[] fileToUpload;
private String comment;
public byte[] getFileToUpload() {
return fileToUpload;
}
public void setFileToUpload(byte[] fileToUpload) {
this.fileToUpload = fileToUpload;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
@Override
public String toString() {
return new ToStringBuilder(this).append("fileToUpload",fileToUpload).append("comment",comment).toString();
}
}
public class FileUploadFormController extends SimpleFormController{
@Override
protected void doSubmitAction(Object command) throws Exception {
FileUploadingCommand commandBean=(FileUploadingCommand)command;
byte[] fileContent=commandBean.getFileToUpload();
String comment=commandBean.getComment();
FileUtils.writeByteArrayToFile(new File("zhsi"), fileContent);
}
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
super.initBinder(request, binder);
binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
}
}
下面是SpringMVC.xml配置文件:
login
command
com.web.springMVC.model.FileUploadingCommand
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
User Info: