package com.upload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
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.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class MyUpload extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text; charset=ISO-8859-1");
if ("status".equalsIgnoreCase(request.getParameter("status"))) {
status(response);
} else {
totalSize = request.getContentLength();
response.sendRedirect("upload.jsp");
try {
upload(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
private void upload(HttpServletRequest request) throws IOException,
FileUploadException {
FileItemFactory factory = new DiskFileItemFactory();
// 通过该工厂对象创建ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
for (Iterator i = items.iterator(); i.hasNext();) {
FileItem fileItem = (FileItem) i.next();
// 如果该FileItem不是表单域
if (!fileItem.isFormField()) {
String fileName = fileItem.getName().substring(
fileItem.getName().lastIndexOf("\\") + 1);
File file = new File("C:\\", fileName);
InputStream in = fileItem.getInputStream();
FileOutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[1024]; // To hold file contents
int n;
while ((n = in.read(buffer)) != -1) {
out.write(buffer, 0, n);
completedSize += (long) n;
}
out.close();
fileItem.delete();// 内存中删除该数据流
}
}
}
private void status(HttpServletResponse response) throws IOException {
long lastSeconds = (System.currentTimeMillis() - startTime) / 1024;
int percent = (int) (completedSize * 100 / (totalSize + 0.0001));
response.getWriter().print(percent);
}
private long totalSize = 0L;
private long completedSize = 0L;
private long startTime = System.currentTimeMillis();
}