文件上傳(Servlet)

/**
 * 
 */
package cn.demo.fupload;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * @author Administrator
 * @version 2009-3-8 文件的上傳下載commons-fileupload
 */
public class FileUploadServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1068590804829697704L;
	private ServletContext sc;//獲取設備上下文對象
	private String savePath;//保存的路徑
	/**
	 * @param args
	 * @throws UnsupportedEncodingException 
	 */
	public void doGet(HttpServletRequest request,HttpServletResponse response)
	throws UnsupportedEncodingException,ServletException,IOException{
		doPost(request,response);
		//將get請求和post請求統一發送給doPost處理
	}
	public void doPost(HttpServletRequest request,HttpServletResponse response)
	throws UnsupportedEncodingException,ServletException,IOException{
		//設置編碼格式
		request.setCharacterEncoding("GBK");
		//使用FileItemFactory創建新的文件項目 
		DiskFileItemFactory factory = new DiskFileItemFactory();
		//FileUpload用來解析request文件上傳請求
		ServletFileUpload upload = new ServletFileUpload(factory);
		try {
			//獲取請求的信息存入列表list中
			List tempList = upload.parseRequest(request);

			Iterator it = tempList.iterator();
			while(it.hasNext()){
				FileItem item = (FileItem)it.next();
				//判斷items中的文本信息
				if(item.isFormField()){
					System.out.println("表單參數的名稱"+item.getFieldName()
					+"表單的參數值"+item.getString("GBK"));				
				}else{
					if(item.getName()!=null&&!item.getName().equals("")){
						System.out.println("所上傳的文件名稱:"+item.getName());
						System.out.println("所上傳的文件大小:"+item.getSize());
						System.out.println("所上傳的文件類別:"+item.getContentType());	
						//用於獲取file中的文件名(不包含路徑)
						File tempFile = new File(item.getName());
						//建立文件內容
						File file = new File(sc.getRealPath("/")+savePath,tempFile.getName());
						//將文件上傳至服務器
						item.write(file);
						request.setAttribute("upload.message", "上傳文件成功!"+item.getName()+item.getSize()+item.getContentType());
					}else{
						request.setAttribute("upload.message", "沒有選擇文件!");
					}//end else 
				}//end else
			}//end while
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("上傳文件失敗!");
			request.setAttribute("upload.message"," 上傳文件失敗!");
		}
		request.getRequestDispatcher("../uploadResult.jsp").forward(request,  response);
	}
	public void init(ServletConfig config){
		//獲取配置文件保存的變量值
		savePath = config.getInitParameter("savePath");
		//獲取Servlet上下文對象
		sc = config.getServletContext();
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章