Servlet 3.0 檔案上傳

by Daphne Lin 13. 二月 2011 19:50

作者:吳修福

精誠資訊 恆逸教育訓練中心 資深講師

 

Servlet 3.0(JSR-315)中加入了處理 Multipart 資料的能力。由於 Java EE 6 的規範才在去年(2011)底正式發佈,所以要使用這個功能的話你必須要有支援Java EE 6 或是Servlet 3.0 的Web Container(例如 GlassFish V3)。


建立上傳用的表單

使用這個功能的表單在設定上必須要:

‧form 標籤的 method 必須為「POST」

‧form 標籤中必須有 enctype 的屬性,值必須為「multipart/form-data」

‧只要少了上述的其中一項,Servlet 在運作的過程中都會有 Exception 發生。

以下是測試用的表單及測試欄位內容:

1. <form action="upload" enctype="multipart/form-data" method="post">

2. 檔案:<input type="file" name="myfile" />

3. <input type="submit" value="上傳" />

4. </form>


接收上傳資料用的 Servlet

上傳資料同樣是透過 request 物件來取得,只有兩個方法:getParts 及 getPart。前者可以取得 Part 類型物件的集合,後者可以給一個欄位名稱做為參數來取得特定的 Part 物件:

1. // 取得 Part 集合

2. Collection<Part> parts = request.getParts();

3.

4. // 取得特定的 Part 物件

5. Part part = request.getPart("myfile");


不管是哪個方法,現在關鍵就在那個 Part 類型(javax.servlet.http.Part)的物件了。基本上 Part 是個介面,實作由伺服器提供,其中定義了以下這些方法:

• String getContentType():取得 Part 物件的 Content-Type 表頭內容。如果是一般的欄位或是沒有上傳資料的話會得到 null。

• String getHeader(String name):取得指定的表頭內容,如果同名表頭有多個,則只取得第一個內容。

• Collection<String> getHeaderNames():取得所有表頭名稱。

• Collection<String> getHeaders(String name):取得指定表頭的所有內容。

• getName():取得欄位名稱。

• getSize():取得上傳的資料大小,單位為 byte。

• getInputStream():取得 InputStream 物件,用來取得上傳的資料內容。

• write(String fileName):將上傳的內容寫入指定的檔案名稱。

• delete():刪除上傳的暫時性資料。


接下來使用者就可以透過上述的API來處理上傳的資料內容了。



您可在課程中了解更多的技術

相關學習資源︰【SL-314-EE5】Java Servlet程式的開發與JSP技術

                          【SL-314-EE6】Java EE6 Java Servlet程式的開發與JSP技術

                         【OCPJWCD】OCPJWCD Java Web 元件系統開發專家認證訓練課程-原SCWCD

Tags:

Java | 吳修福Hugh Wu

新增評論




  Country flag
biuquote
  • 評論
  • 線上預覽
Loading






NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List