servlet3.0新特性之文件上傳&common-fileupload

    Java web開發中文件上傳是比較經常使用的功能,例如論壇註冊的時候上傳幾K的圖片做爲頭像。前段時間信手翻了翻架子上的書,看到servlet3.0新特性當中有對文件上傳功能的支持,隨便寫寫servlet 3.0當中的Part和common-fileupload的ServletFileUpload。 html

    html的<input type = "file" ...>標籤表示文件域,能夠在頁面上產生一個文本框和一個文件選擇按鈕,要實現文件上傳功能,該標籤須要配置enctype屬性,一般的配置是:<form method = "post" action = "#" enctype = "multipart/form-data"></form>
java

    再來講說Part,每個Part對象對應着一個文件上傳域,Part對象提供了許多訪問上傳文件屬性的方法,並提供write(String file)方法用於把上傳的文件寫入服務器硬盤。 web

    能夠在web.xml中經過<multipart-config>對上傳參數進行配置,servlet配置: 服務器

    

<servlet>
  <servlet-name>uploadFile</servlet-name>
  <servlet-class>test.testFileUpload.com.UploadFileAction</servlet-class>
  <multipart-config>
    <max-file-size>1024000</max-file-size>
  </multipart-config>
</servlet>



    Part對象經過request對象獲取文件上傳域,經過write(String path)方法把文件寫入到指定路徑。上傳action部分代碼:
post


    

public void doServices(HttpServletRequest request, HttpServletResponse response) throws IOException{
	Part part = null ;
	try {
		part = request.getPart("uploadFile");
	} catch (IllegalStateException | ServletException e) {
		e.printStackTrace();
	}
	
	String fileName = request.getParameter("fileName");
	String path = getServletContext().getRealPath("/uploadFiles")+"/"+fileName;
	part.write(path);
}



    而後再說說ServletFileUpload,common-fileupload須要和common-io配套使用,一般通須要經過DiskFileItemFactory設置上傳文件臨時存儲路徑、文件存儲路徑、上傳文件大小限制等,經過ServletFileUpload對象的parseRequest方法獲取FileItem對象列表,而後遍歷列表獲取form上傳域。文件上傳Action代碼以下:
spa


public void doServices(HttpServletRequest request, HttpServletResponse response){
   DiskFileItemFactory factory = new DiskFileItemFactory();
   String tmpPath = getServletContext().getRealPath("/uploadFilesTmp")+"/";//臨時路徑
   String path = getServletContext().getRealPath("/uploadFiles")+"/";//文件存儲路徑
   factory.setRepository(new File(tmpPath));
   factory.setSizeThreshold(1024*1024); //緩衝區大小


   ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
   servletFileUpload.setFileSizeMax(-1);//設置上傳文件大小

   try {
     List<FileItem> fileItemList = servletFileUpload.parseRequest(request);
 
     for(FileItem fileItem : fileItemList){
       if((!fileItem.isFormField())&&(fileItem.getSize()>0)){
         String clientPath = fileItem.getName();
         clientPath.replaceAll("\\\\", "/");
         String clientFileName = clientPath.substring(clientPath.lastIndexOf("/")+1);
         System.out.println(clientFileName);
         File storeInServerFile = new File(path+"temp");
 
         fileItem.write(storeInServerFile);
       }else{}
     }
   } catch (FileUploadException e) {
     e.printStackTrace();
   } catch (Exception e) {
     e.printStackTrace();
   }
}
相關文章
相關標籤/搜索