精簡Servlet3.0進行圖片上傳
上傳檔案的方法就哪幾種,但總感覺麻煩一點也不精簡,就struts2的方法稍好一點。
下面的方法在之前寫的Servlet3.0方法之上進行再次精簡,應該是最易懂易用的,但是普通表單域是不能通過req.getParameter來獲得(因為二進位制流解析),來看看吧~
1.upload.jsp 檔案上傳表單
<body>
<div class="form" align="center">
<form action="UploadServlet" enctype="multipart/form-data" method="post" >
select:<input type="file" name="file">
param:<input name="param"/><br/>
<input type="submit" value="submit">
</form>
</div>
</body>
2.UploadServlet.java 檔案上
@WebServlet("/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet{
private String filePath; //檔案儲存路徑
private static final long serialVersionUID = 3465909202303185511L;
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 對請求包設定編碼
req.setCharacterEncoding("utf-8");
// 告知tomcat如何編碼,瀏覽器如何解碼
resp.setContentType("text/html; charset=utf-8");
//獲得專案的根目錄,並設計檔案儲存路徑
filePath=getServletContext().getRealPath("/image");
// 為了簡單,後面也直接就以fileName作為儲存檔案的名稱
SimpleDateFormat dateFormat=new SimpleDateFormat("yyMMddHHmmss");
String fileName=dateFormat.format(new Date())+".jpg";
//獲取檔案型別和大小
Part part = req.getPart("file");
System.out.println(part.getContentType());
System.out.println(part.getSize());
//獲得文字欄位,下面方法不可行,只能解析英文和數字,中文即使編碼也不行。
String param=req.getParameter("param");
System.out.println("只能中文哦:"+param);
Collection<String> headerNames = part.getHeaderNames();
// 遍歷檔案上傳域的Header Name
for (String headerName : headerNames) {
System.out.println(headerName + "---->" + part.getHeader(headerName));
}
// 將檔案儲存到專案下的uploads資料夾下,為了簡單這裡沒寫判斷目錄是否存在及建立目錄的操作,要先確保該目錄已經存在
part.write(filePath + "/" + fileName);
System.out.println("檔案儲存在:"+filePath+fileName);
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
}