1. 程式人生 > >Web的檔案上傳

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"));