1. 程式人生 > >使用commons-fileupload元件上傳檔案

使用commons-fileupload元件上傳檔案

<%

	//1、獲取一個工廠物件FileItemFactory
	FileItemFactory factory = new DiskFileItemFactory();
	//2、獲取一個檔案上傳物件ServletFileUpload
	ServletFileUpload upload = new ServletFileUpload(factory);
	upload.setSizeMax(100 * 1024);
	try {
		//3、判斷表單enctype是否是檔案上傳型別isMultipartContent()
		if (ServletFileUpload.isMultipartContent(request)) {
			//由於從客戶端傳送到伺服器的表單中,既包含了普通表單域,又包含了檔案域。
			//那麼我們應該先解析請求,從而獲取既包含了普通表單域,又包含了檔案域的集合
			List<FileItem> items = upload.parseRequest(request);
			for (FileItem item : items) {
				//如果是普通表單域,獲取使用者名稱。然後輸出
				if (item.isFormField()) {
					if (item.getFieldName().equals("uname")) {
						String uname = item.getString("UTF-8");
						out.print("使用者名稱為:" + uname + ",該使用者上傳了檔案<br/>");
					}
				} else {
					//檔名獲取;在IE瀏覽器裡,fileName是本地檔案路徑,例:D:/wbb/wbb.jpg
					String fileName = item.getName();	
					//判斷使用者上傳的檔案是否符合規範
					List<String> suffixes = Arrays.asList("jpg", "png",
							"jpeg", "pneg");
					//獲取檔案上傳的檔案字尾名
					int atPoint = fileName.lastIndexOf(".") + 1;
					//獲取檔名的字尾
					String suffix = fileName.substring(atPoint);
					if (suffixes.contains(suffix)) {
						//如果字尾名包含,說明:符合要求
						//如果是檔案域,那麼就進行上傳
						//上傳到哪裡?—— tomcat(伺服器)
						//上傳檔案的資料夾 ? 1、手動在webroot根目錄下建立一個空的uploads資料夾,當專案部署執行的時候,該資料夾會自動在webapps——本專案下建立,
						//目的是用來接收上傳的檔案
						//2、File file = new File(xxx); !file.exists() ————  file.mkdirs()
						String filePath = request.getSession()
								.getServletContext()
								.getRealPath("uploads");
						File file = new File(filePath);
						if (!file.exists()) {
							file.mkdirs();
						}
						// 建立中轉File物件 
						//原因:由於在IE瀏覽器中,會將檔案的全路徑作為檔名;而在FF、Chorme中只保留檔案的名稱。所以建立中轉物件,通過該物件的getName()方法返回檔名
						File tempFile = new File(fileName);
						//表示在filePath路徑下建立名字為tempFile.getName()的空檔案
						File saveFile = new File(filePath,
								tempFile.getName());
						//上傳!fileItem write()   寫  將檔案寫入到指定的路	徑下
						item.write(saveFile);
						out.print("上傳檔案成功!檔案的名稱為:" + tempFile.getName()
								+ "\t檔案的路徑為:" + filePath + "<br/>"+fileName);
					} else {
						out.print("檔案上傳失敗!檔案型別必須是\"jpg\", \"png\",\"jpeg\", \"pneg\"<br/>");
					}
				}
			}
		}
	} catch (FileUploadBase.SizeLimitExceededException ex) {
		out.print("檔案上傳失敗!必須小於" + upload.getSizeMax() / 1024 + "kb");
	}
	
%>