Web的檔案上傳
一、上傳
1、上傳一般都是使用表單,需要新增以下部分 * method="post" * enctype="multipart/form-data" * 表單中需要新增檔案表單項:<input type="file" name="xxx" />
<form action="xxx" method="post" enctype="multipart/form-data"> 使用者名稱;<input type="text" name="username"/><br/> 照 片:<input type="file" name="zhaoPian"/><br/> <input type="submit" value="上傳"/> </form>
2、上傳會讓request.getParametere("xxx")方法失效,此時將上傳表單項分為普通表單項和檔案表單項。
3、上傳步驟
準備工作:匯入commons-fileupload.jar, commons-io.jar倆個包
1). 建立工廠:DiskFileItemFactory factory = new DiskFileItemFactory(); 2). 建立解析器:ServletFileUpload sfu = new ServletFileUpload(factory); 3). 使用解析器來解析request,得到FileItem集合:List<FileItem> fileItemList = sfu.parseRequest(request);
注意:List的順序與表單項從上到下的順序一致。
FileItem常用的方法: * boolean isFormField():是否為普通表單項!返回true為普通表單項,如果為false即檔案表單項! * String getFieldName():返回當前表單項的名稱; * String getString(String charset):傳入編碼,返回表單項的值; * String getName():返回上傳的檔名稱 * long getSize():返回上傳檔案的位元組數 * InputStream getInputStream():返回上傳檔案對應的輸入流 * void write(File destFile):把上傳的檔案內容儲存到指定的檔案中。
//建立將要儲存檔案的檔案流
File file=new File("C:/Users/13928/Desktop/圖示.jpg");
item2.write(file); //將檔案流寫入伺服器
4、上傳檔案的大小限制
- 單個檔案大小限制
> sfu.setFileSizeMax(100*1024):限制單個檔案大小為100KB,必須在解析開始之前呼叫! > 如果上傳的檔案超出限制,在parseRequest()方法執行時,會丟擲異常!FileUploadBase.FileSizeLimitExceededException
- 整個請求所有資料大小限制
> sfu.setSizeMax(1024 * 1024):限制整個表單大小為1M,必須在解析開始之前呼叫! > 如果上傳的檔案超出限制,在parseRequest()方法執行時,會丟擲異常!FileUploadBase.SizeLimitExceededException
5、快取大小與臨時目錄 * 快取大小:上傳檔案超出多大,才向硬碟儲存!預設為10KB * 臨時目錄:向硬碟的什麼目錄儲存 設定快取大小與臨時目錄:new DiskFileItemFactory(20*1024, new File("F:/temp"));