commons-fileupload(apache開源文件上傳組件)使用方式

fileupload的主要功能是上傳文件到服務器,或提供給客戶端下載文件,使用fielupload時需要注意以下幾點:

1、上傳文件使用的都是form表單,表單有兩種:
 一種是默認的普通表單,它不能上傳文件。它的屬性值默認是enctype="application/x-www-form-urlencoded"。表示使用瀏覽器上一次解析頁面的方式進行編碼表單裏的數據。
 第二種是混合表單,它可以上傳文件。必須設置它的屬性enctype="multipart/form-data"。表示該表單項是混合出現的,不能進行編碼。
 
2、在使用setFileSizeMax(param);時,param的大小是B(字節)爲單位。
 
3、當定義了一個FileItme的對象item,String fileName = item.getName()時,使用IE7 fileName只有文件名  使用IE6 包含了路徑,因此必須進行截取fileName = fileName.substring(fileName.lastIndexOf("/")+1);

4、當文件上傳完畢後,會存在着臨時文件,需要手動刪除(假設定義FileItme的對象item,刪除item.delete())。
 
 
附加:常見的文件MIME類型:
(.exe文件或未知的文件類型)--->application/octet-stream
(txt文本)--->text/plain
 (html網頁)--->text/html
(.jpg圖片)---->image/pjpeg
 (.png圖片)---->image/x-png
 (.avi視頻)---->video/avi
 (.execul的表格)---->application/vnd.ms-excel



java代碼使用示例:

 public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
            // 1. 創建工廠類對象
	    DiskFileItemFactory factory = new DiskFileItemFactory();
	    // 2. 創建文件上傳對象
	    ServletFileUpload upload = new ServletFileUpload(factory);
	    // 3. 判斷表單類型
	    if(ServletFileUpload.isMultipartContent(request)){
	    	try {
	    		// 4.混合表單
		    	List<FileItem> list = upload.parseRequest(request);
		    	// 5. 遍歷對象
		    	for(FileItem item:list){
                           // 6. 判斷是否是普通字段還是文件字段
		    	   if(item.isFormField()){
		    		   // 普通字段
		    		   String name = item.getFieldName();
		    		   String value = item.getString();
		    		   System.out.println(name+"="+value);
		    	   }else{
		    		   // 文件字段
		    		   String name = item.getFieldName();
		    		   String value = item.getString();
		    		   String fileName = item.getName();
		    		   String fileType = item.getContentType();
		    		   
		    		   // 獲取文件流
		    		   InputStream in = item.getInputStream();
		    		   // 定義上傳的目錄
		    		   String dir = this.getServletContext().getRealPath("/WEB-INF/uploads");
		    		   File file = new File(dir,fileName);
		    		   FileOutputStream out = new FileOutputStream(file);
		    		   
		    		   byte[] b = new byte[1024];
		    		   int len = 0; 
		    		   
		    		   // 循環邊讀邊寫
		    		   while((len = in.read(b)) != -1){
		    			   out.write(b, 0, len);
		    		   }
		    		   // 釋放資源
		    		   in.close();
		    		   out.close();
		    	   }
		    	}
			} catch (Exception e) {
                           System.out.println("上傳失敗");
			}
	    }else{
	    	// 普通表單
	    	return;
	    }
   }


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