tomcat7裡面自帶的servlet3.0.jar,支持很多新特性,例如,annotation配置servlet,上傳,異步等等。。。。
如果你的tomcat版本低於7的話,單獨在項目中引入servlet3.0.jar的話,有可能會出錯,具體沒研究過,可能是不兼容吧。所以要使用servlet3.0新特性的話,盡量使用tomcat7
不多說了,貼上代碼
@WebServlet(name = "uploadServlet", urlPatterns = "/uploadServlet") @MultipartConfig public class ServletUpload extends HttpServlet { private static final long serialVersionUID = 2527441790014487640L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) { doPost(request, response); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) { try { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); Collection<Part> parts = request.getParts(); if (null == parts) { // 拋出異常 } for (Part part : parts) { String header = part.getHeader("content-disposition"); String fileName = getFileName(header); part.write("d:/" + fileName); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ServletException e) { e.printStackTrace(); } } /** * 獲得文件名 fileName-----取得上傳文件的後綴+uuid * * @param header * @return */ private String getFileName(String header) { String suffix = header.substring(header.lastIndexOf("."), header.length() - 1); String fileName = UUID.randomUUID().toString().replace("-", ""); return fileName + suffix; } }
看起來是不是很簡單吧,@MultipartConfig標注主要是為了輔助Servlet3.0中HttpServletRequest提供的對上傳文件的支持。該標注寫在Servlet類的聲明之前,一表示該Servlet希望處理的請求時multipart/form-data類型的。另外,該標注還提供了若干屬性用於簡化對上傳文件的處理
@MultipartConfig標注屬性
fileSizeThershold int型 是(可選) 描述:當前數據量大於該值時,內容將被寫入文件。
location String型 是(可選) 描述:存放生成文件的地址
maxFileSize long型 是(可選) 描述:允許上傳的文件最大值,默認為-1,表示沒有限制
maxRequestSize long型 是(可選) 描述:針對 multipart/form-data 請求的最大數量,默認為-1,表示沒有限制