java web 檔案上傳實現
阿新 • • 發佈:2019-02-08
使用jspsmart
完成檔案上傳
用於向伺服器上傳的表單
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>檔案上傳</title>
</head>
<body>
檔案上傳
<hr>
<%--enctype屬性 告訴servlet 表單提交的資料將會被編碼並且備多個部分,此時method以定位post--%>
<form action="servlets/UploadServlet" method="post" enctype="multipart/form-data">
請選擇檔案上傳
<input type="file" name="myFile">
<input type="submit" value="上傳">
</form>
${msg}
</body>
</html>
可以看出這個jsp
中平時的表單還是有些區別的。首先是enctype
servlet
這個表單提交的東西會被編碼成多個部分,並且其值一定是multipart/form-data
,同時method
的值一定是post
。
jspsmart
介紹
public final void initialize(ServletConfig var1, HttpServletRequest var2, HttpServletResponse var3)
在進行上傳之前,需要進行初始化操作,傳入當前 servlet 的 ServletConfig,HttpServletRequst, HttpServletResponse
public void upload()
初始化完成後,實現上傳
public Files getFiles()
獲取上傳的所有的檔案物件
public Files getFiles().getFile(i)
獲取上傳的所有檔案物件的第 i 並返回一個File物件
public String getFileName()
得到檔名
public void saveAs(String var1, int var2)
將檔案進行儲存,引數1是儲存的路徑,引數2是儲存的方式有如下選擇 public static final int SAVE_VIRTUAL = 1; 按照硬碟上的無力路徑儲存 public static final int SAVE_PHYSICAL = 2; 按照網站的虛擬路徑儲存
Servlet類的實現
/**
* Project: UploadFile
* Created by Zdd on 2018/3/14.
*/
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
SmartUpload smartUpload = new SmartUpload();
ServletConfig config = this.getServletConfig();
// 初始化
smartUpload.initialize(config, req, resp);
try {
// 上傳檔案
smartUpload.upload();
// 得到上傳檔案的物件
File file = smartUpload.getFiles().getFile(0);
file.saveAs("/Users/lucky/java/java_web_sample/UploadFile/uploadResult/" + file.getFileName(), SmartUpload.SAVE_PHYSICAL);
} catch (SmartUploadException e) {
e.printStackTrace();
}
String msg="Upload Success";
req.setAttribute("msg",msg);
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/index.jsp");
requestDispatcher.forward(req,resp);
}
}
效果如圖所示