使用Servlet技術上傳文件

支持文件上傳是web程序最基本和常見的需求。在早期的servlet規範中,實現文件上傳須要使用第三方庫或者複雜的輸入處理。針對此問題,servlet如今以通用和可移植的方式幫助提供了一個可行的解決方案。servlet技術如今提供開箱即用的上傳文件方法,因此任何實現規範的web容器都能經過HttpServletRequest 對象解析multipart請求和生成有效的mime附件。
一個新的註解,javax.servlet.annotation.MultipartConfig,用來代表須要multipart/form-data類型請求的定義上。使用@MultipartConfig註解的servlet均可以經過調用 request.getPart(String name)或request.getParts()方法獲取一個給定的multipart/form-data請求中的Part構件。java

@MultipartConfig註解

@MultipartConfig註解提供下面這些可選的屬性:web

  • location 操做系統上的一個絕對路徑。location屬性不支持基於web上下文的相對路徑。location用來在處理Part時存儲臨時文件或者是文件大小超過fileSizeThreshold設置的值。默認location是「」
  • fileSizeThreshold 存儲在硬盤上的臨時文件的大小。默認是0byte
  • MaxFileSize 容許上傳的最大文件大小,單位是byte。若是上傳的文件超過限制,web容器將拋出異常(IllegalStateException)。默認設置是不限制大小。
  • maxRequestSize 一個 multipart/form-data請求能攜帶的最大字節數。

例如,@MultiPartConfig能夠以下構造:編碼

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024,
    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)

代替使用 @MultipartConfig註解在你的upload servlet中硬編碼這些屬性,須要在web.xml中做爲一個子節點添加下面的節點:操作系統

<multipart-config>
    <location>/tmp</location>
    <max-file-size>20848820</max-file-size>
    <max-request-size>418018841</max-request-size>
    <file-size-threshold>1048576</file-size-threshold>
</multipart-config>

getParts和getPart方法

servlet規範定義了HttpServletRequest的兩個附加方法:code

  • Collection<Part> getParts()
  • Part getPart(String name)

request.getParts()方法返回全部Prat集合。若是你有超過一個文件類型的輸入,將返回多個Part對象。由於全部Part對象都被命名, getPart(String name)方法用來訪問特定的Part對象。另外,getParts()返回Iterable<Part>能夠用來遍歷全部Part。
javax.servlet.http.Part是簡單的,提供每一個Part的自省方法。方法列表:orm

  • 獲取Part的名稱、大小、類型等
  • 查詢隨Part提交的Header信息
  • 刪除一個Part
  • 輸出Part到磁盤

例如,Part 接口提供write(String filename) 方法以特定名稱寫入到文件中。文件能夠使用@MultipartConfig註解定義的location直接保存,在fileupload示例中,location是由表達中的屬性定義的。xml

相關文章
相關標籤/搜索