traditional API (傳統方式)
//上傳路徑 File file = new File("C:/upload"); //臨時文件路徑 File tempFile = new File("C:/uploadtemp"); if(!file.exists()) { file.mkdir(); } if(!tempFile.exists()) { tempFile.mkdir(); } //判斷 request 是一個文件上傳的 request //通過 ServletFileUpload 類的靜態方法 isMultipartContent 來判斷 if(ServletFileUpload.isMultipartContent(request)) { //用 DiskFileItemFactory 創建新的 file items (只是臨時的) //DiskFileItemFactory 創建FileItem 實例,並保存其內容在<b>內存</b>或者<b>硬盤中</b> //通過一個閥值來決定這個 FileItem 實例是存放在<b>內存</b>或者<b>硬盤中</b> DiskFileItemFactory factory = new DiskFileItemFactory(); //設置閥值大小 //不設置的話,默認10k //超過這個閥值,FileItem將直接寫入到磁盤 factory.setSizeThreshold(1024*10); //設置臨時文件夾 //不設置,默認為系統默認Temp文件路徑,調用 System.getProperty("java.io.tmpdir") 獲取 //超過閥值的 FileItem 實例將存放在這個目錄中 factory.setRepository(tempFile); //構造servletFileUpload 的實例,該實例提供工廠模式創建FileItem的DiskFileItemFactory實例 ServletFileUpload fileUpload = new ServletFileUpload(factory); //設置一個<b>完整的請求</b>允許的最大大小(注意是完整請求,包括非file類型的表單,比如Text類型) fileUpload.setSizeMax(10*1024*1024); //設置所允許的最大的單個上傳文件大小(對應一個FileItem對象) //fileUpload.setFileSizeMax(10*1024*1024); try { //每一個FileItem 對應一個 request 請求中from表單中的 input 元素 //解析 request 請求,將request中提交的值存入List數組 List<FileItem> items = fileUpload.parseRequest(request); for(FileItem item : items) { //是不是一個文件上傳組件 if(!item.isFormField()) { String name = item.getName(); System.out.println("name:" + name); System.out.println("length:" + item.getSize()); item.write(new File("C:/upload/"+name)); } else { String desc = item.getString("UTF-8"); System.out.println("文件描述:" + desc); } } } catch (Exception e) { e.printStackTrace(); } } else { throw new RuntimeException("請設置form表單的enctype屬性"); }
Streaming API
//設置文件上傳路徑 String UploadFilePath = "d:/upload"; //限制文件大小 //通過 request.getHeader("Content-Length") 獲取request 請求內容長度來限制 if(ServletFileUpload.isMultipartContent(request)) { //創建ServletFileUpload實例 ServletFileUpload upload = new ServletFileUpload(); try { //解析request 請求 並返回FileItemStream 的iterator 實例 FileItemIterator iter = upload.getItemIterator(req); while (iter.hasNext()) { FileItemStream item = iter.next(); String name = item.getFieldName(); InputStream stream = item.openStream(); if (item.isFormField()) { System.out.println("Form field " + name + " with value " + Streams.asString(stream) + " detected."); } else { System.out.println("File field " + name + " with file name " + item.getName() + " detected."); // Process the input stream //System.out.println(Streams.asString(stream)); System.out.println("shuru:"); String filename = new Scanner(System.in).next(); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(new File("e:/upload"),"ez.zip"))); BufferedInputStream bis = new BufferedInputStream(stream); byte[] buffer = new byte[1024]; int len = -1; while (-1 != (len = bis.read(buffer))){ bos.write(buffer,0,len); } bis.close(); bos.flush(); bos.close(); PrintWriter out = resp.getWriter(); out.write("完成"); System.out.println("wanchengle "); } } } catch (FileUploadException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } else { throw new RuntimeException("請設置form表單的enctype屬性"); }