|
<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="java.io.File"%>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="java.util.List"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>
<%@ page import="java.io.FileOutputStream"%>
<%@ page import="java.io.InputStream"%>
<%
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置上传工厂的限制
//设置上传文件的最大大小
factory.setSizeThreshold(1024 * 1024 * 20);
//设置保存文件的路径
factory.setRepository(new File(request.getSession()
.getServletContext().getRealPath("/")));
//创建上传文件的ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
//设置最大的上传限制
upload.setSizeMax(1024 * 1024 * 20);
//处理HTTP请求,items是所有的表单项(解析请求对象,获得所有请求的表单项数据)
List items = upload.parseRequest(request);
//遍历所有的表单项
for (int i = 0; i < items.size(); i++) {
FileItem item = (FileItem) items.get(i);
//判断该表单项是否为一个普通表单项(非File类型控件)
if (item.isFormField()) {
String name = item.getFieldName();//获得表单项的名字
String value = item.getString("GBK");//以GBK编码获得表单项输入数据
out.println(name + " = " + value);
} else {
//代表该表单域是一个文件域
//取得文件域的表单域名
String fieldName = item.getFieldName();
//获得上传的文件名
String fileName = item.getName();
fileName = request.getSession().getServletContext()
.getRealPath("/")
+ System.currentTimeMillis()
+ fileName.substring(fileName.lastIndexOf("."),
fileName.length());
String contentType = item.getContentType();
//以当前时间来生成上传文件的文件名
FileOutputStream fout = new FileOutputStream(fileName);
//如果上传文件域对应文件的内容已经在内存中
if (item.isInMemory()) {
fout.write(item.get());
}
//如果文件内容不完全在内存中
else {
//获取上传文件内容的输入流
InputStream is = item.getInputStream();
byte[] buffer = new byte[1024];
int length = is.read(buffer);
while (length == 1024) {
fout.write(buffer);
}
fout.write(buffer, 0, length);
is.close();
fout.close();
}
}
}
%>
|