專案結構
WebRoot/
├── index.jsp // 上傳頁面
├── WEB-INF/
│ ├── web.xml // Servlet 映射
│ └── lib/
│ └── smartupload.jar
└── src/
└── com/pop/action/SmartuploadAction.java
1. 前端頁面 index.jsp
<form action="upload" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="uname"/><br/>
上傳文件:<input type="file" name="pic"/><br/>
<input type="submit" value="提交"/>
</form>
2. web.xml 配置
<servlet>
<servlet-name>uploadAction</servlet-name>
<servlet-class>com.pop.action.SmartuploadAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>uploadAction</servlet-name>
<url-pattern>/upload/*</url-pattern>
</servlet-mapping>
3. Servlet 處理類
public class SmartuploadAction extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
SmartUpload su = new SmartUpload();
PageContext pageContext = JspFactory.getDefaultFactory()
.getPageContext(this, req, resp, null, true, 8192, true);
su.initialize(pageContext);
try {
su.upload();
su.save("upload"); // 儲存至項目 upload 目錄
} catch (SmartUploadException e) {
e.printStackTrace();
}
Request request = su.getRequest();
String uname = request.getParameter("uname");
System.out.println("用戶:" + uname);
}
}
關鍵點總結
- 表單必須設定
enctype="multipart/form-data"
SmartUpload 封裝了請求解析,透過 getRequest() 獲取普通參數
save("upload") 會自動建立目錄並處理同名文件覆蓋
- 依賴
smartupload.jar,需放入 WEB-INF/lib