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



發佈了37 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章