此前,對於處理上傳文件的操作一直是讓開發者頭疼的問題,因為 Servlet 本身沒有對此提供直接的支持,需要使用第三方框架來實現,而且使用起來也不夠簡單。Servlet 3.0 已經提供了這個功能,而且使用也非常簡單。為此,HttpServletRequest 提供了兩個方法用於從請求中解析出上傳的文件:
•Part getPart(String name)
•Collection<Part> getParts()
前者用於獲取請求中給定 name 的文件,后者用於獲取所有的文件。每一個文件用一個 javax.servlet.http.Part 對象來表示。該接口提供了處理文件的簡易方法,比如 write()、delete() 等。至此,結合 HttpServletRequest 和 Part 來保存上傳的文件變得非常簡單,如下所示:
Part photo = request.getPart("photo"); photo.write("/tmp/photo.jpg"); // 可以將兩行代碼簡化為 request.getPart("photo").write("/tmp/photo.jpg") 一行。
另外,可以配合前面提到的 @MultipartConfig 注解來對上傳操作進行一些自定義的配置,比如限制上傳文件的大小,以及保存文件的路徑等。其用法非常簡單。
需要注意的是,如果請求的 MIME 類型不是 multipart/form-data,則不能使用上面的兩個方法,否則將拋異常。