为什么80%的码农都做不了架构师?>>>
为了不打击大家的积极性,暂时只着重讲用法,原理方面暂时不讲太多。
配置web.xml
文件上传需要用到servlet3的异步处理功能。需要在web.xml配置文件中加入异步支持声明(注释处):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd"version="2.4"><servlet><servlet-name>dispatcher</servlet-name><servlet-class>mint.mvc.core.ServiceServlet</servlet-class><!-- 开启servlet3.0的异步处理功能 --><async-supported>true</async-supported><init-param><param-name>actionPackages</param-name><param-value>demo;</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
编写上传文件的action
文件上传的action:
package demo;import mint.mvc.annotation.BaseMapping;
import mint.mvc.annotation.Mapping;
import mint.mvc.core.upload.MultipartConfig;
import mint.mvc.core.upload.MultipartParameter;@BaseMapping("/upload")
public class UploadAction {@MultipartConfig(attributeName = "params", limitSize = 1024*1024*1024, tempFilePath = "D:/upload")@Mapping(urls="/index", method="post")public String index(MultipartParameter[] params, String author){String fileParam = "";String commonParam = "";if(params != null){for(MultipartParameter part : params){if(part.isFile()){fileParam += part.getTempFile().getAbsolutePath()+"<br/>";} else {commonParam += (part.getName()+":"+part.getParameterValue())+"<br/>";}}}System.out.println(author);return fileParam+commonParam;}
}
处理文件上传请求的action方法需要添加MultipartConfig注解,MultipartConfig有三个参数:
- attributeName:为了在action内有办法获取到上传的文件,mint mvc把这些上传的文件都封装在一个数组里,这个数组用request对象的setAttribute方法,以指定的“attributeName”保存到request对象里。最后,可以在action内,用request.getAttribute()方法获得该数组。在mint mvc的参数博文中说过,mint mvc会自动的用HttpServletRequest的属性初始化action参数,所以只要在action上声明一个以attributeName命名,类型为MultipartParameter[]的参数,就可以轻松得到封装有文件信息的数组
- limitSize:限制每个上传文件(包括非文件参数)的大小,单位是B。如果上传过程中,发现有文件或参数超过此限制,上传过程将会终止
- tempFilePath:临时文件的保存路径。临时文件的命名格式是:UUID_真实文件名
mint mvc的上传功能除了可以接受文件外,还可以接收普通字段。普通字段会封装在request中,可以通过request的getParameters方法获取。
文件上传演示
文件上传的页面:
<!DOCTYPE html>
<meta charset="UTF-8">
<form action="upload" enctype="multipart/form-data" method="post" target="demo_iframe">价格:<input type="text" name="price" value="50"/><br/>作者:<input type="text" name="author" value="琼羽"/><br/>书籍:<input type="file" name="books"/><br/>书籍:<input type="file" name="books"/><br/>书籍:<input type="file" name="books"/><br/><button type="submit">上传</button>
</form>
选择文件:
客户端返回结果:
上传成功的文件:
本demo下载地址:http://git.oschina.net/895925636/mintdemo/tree/master
项目地址:http://git.oschina.net/895925636/mint-mvc
收录地址:http://www.oschina.net/p/mint-mvc
博客地址:http://www.wemakers.net/home/blog?cate=1001
(完)