FileUpload上传示例程序: package org.sunxin.ch22; import java.io.File; import java.io.IOException; import java.io.PrintWriter; 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.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadFileServlet extends HttpServlet { public UploadFileServlet() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("GBK"); PrintWriter out=response.getWriter(); response.setContentType("text/html;charset=GBK"); DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(0x8000); //设置上传缓冲值512kB ServletFileUpload upload=new ServletFileUpload(factory); String dirPath=getInitParameter("fileDIR"); //读取保存文件的目录 File dir=new File(dirPath); if(!dir.exists()){ dir.mkdirs(); } upload.setSizeMax(0xA00000); //设置上传最大值10MB factory.setRepository(dir); WriteListener wl=new WriteListener(out); upload.setProgressListener(wl); try { List<?> fileList= upload.parseRequest(request); Iterator<?> it =fileList.iterator(); while(it.hasNext()){ FileItem item=(FileItem)it.next(); if(!item.isFormField()){ String fieldName=item.getFieldName(); String fileName=item.getName(); String contentType=item.getContentType(); int pos=fileName.lastIndexOf(File.separatorChar); if(fileName==null || fileName.equals("")){ continue; } if(pos>0){ fileName=fileName.substring(pos+1); //获取不带路径的文件名 } File uploadedFile = new File(dir,fileName); item.write(uploadedFile); //写入到目标文件 out.println("fieldName:"+fieldName+"<br>"); out.println("fileName:"+fileName+"<br>"); out.println("contentType:"+contentType+"<br>"); out.println("<hr>"); } } } catch (Exception e) { throw new ServletException("上传文件失败!"); } out.close(); } /* * 创建上传文件进度监听器 */ private class WriteListener implements ProgressListener { PrintWriter out; public WriteListener(PrintWriter out) { this.out = out; } public void update(long pBytesRead, long pContentLength, int pItems) { out.println("We are currently reading item " + pItems+"<br>"); if (pContentLength == -1) { out.println("So far, " + pBytesRead + " bytes have been read."+"<br>"); } else { out.println("So far, " + pBytesRead + " of " + pContentLength + " bytes have been read."+"<br>"); } out.println("<hr>"); out.flush(); } } // ProgressListener progressListener = new ProgressListener(){ // public void update(long pBytesRead, long pContentLength, int pItems) { // System.out.println("We are currently reading item " + pItems); // if (pContentLength == -1) { // System.out.println("So far, " + pBytesRead + " bytes have been read."); // } else { // System.out.println("So far, " + pBytesRead + " of " + pContentLength // + " bytes have been read."); // } // } // }; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }