1. 程式人生 > >精簡Servlet3.0進行圖片上傳

精簡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);
}
}