import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class CommonUpload extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 创建一个文件上传的工厂实例
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置文件缓存地址和缓存大小
factory.setRepository(new File(request.getRealPath("/")));
factory.setSizeThreshold(1024 * 1024 * 20);
// 用上工厂实例创建一个上传文件对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 处理页面传过来的表单项
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
// 遍历所有的表单项
for (int i = 0; i < items.size(); i++) {
FileItem item = (FileItem) items.get(i);
// 如果这个表单是普通表单域
if (item.isFormField()) {
// 取得表单名
String name = item.getFieldName();
// 取得表单的value值
String value = item.getString("GBK");
// 将表单名和表单的value值传给页面
request.setAttribute("name", name);
request.setAttribute("value", value);
}
// 如果是文件域
else {
// 取得文件域的表单域名
String fieldName = item.getFieldName();
// 取得文件名
String fileName = item.getName();
// 取得文件类型
String contentType = item.getContentType();
// 对于上传文件的存放地址来建立一个输出流
FileOutputStream fos = new FileOutputStream(request
.getRealPath("/")
+ System.currentTimeMillis()
+ fileName.substring(fileName.lastIndexOf("."),
fileName.length()));
// 判断上传文件是否在缓存中
if (!item.isInMemory()) {
// 得到上传文件输入流
InputStream is = item.getInputStream();
byte[] buffer = new byte[1024];
int len;
// 将上传文件写入服务器文件中
while ((len = is.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
is.close();
fos.close();
}
// 将表单名传回页面
request.setAttribute("FieldName", fieldName);
// 将文件名传回页面
request.setAttribute("fileName", fileName);
// 将文件类型传回页面
request.setAttribute("contentType", contentType);
}
}
// 页面跳转
RequestDispatcher rq = request
.getRequestDispatcher("resultCommonUpload.jsp");
rq.forward(request, response);
}
}