概述:
文件上傳是網站中很常用的一個功能,下面是一個文件上傳的基本demo。
由於是使用的新版jar包,所以需要依賴以下幾個jar包:
catalina.jar
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
public class UpLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* 該方法用於文件上傳
* @jar catalina.jar commons-fileupload-1.3.1.jar commons-io-2.4.jar
*/
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
request.setCharacterEncoding("UTF-8");
/*
* 文件上傳邏輯
*/
//創建DiskFileItemFactory對象,爲解析器提供解析時的一些缺省配置
DiskFileItemFactory dfif = new DiskFileItemFactory();
//創建解析器
ServletFileUpload sfu = new ServletFileUpload(dfif);
//使用解析器解析分析器
try {
//解析request請求
List<FileItem> items = sfu.parseRequest(request);
for(FileItem item : items) {
//如果是普通表單類
if(item.isFormField()) {
continue;
}
//執行上傳文件動作
//根據servlet上下文獲得服務器中實際物理路徑
//此處可以更改爲其他另存爲的路徑
String path = getServletContext().getRealPath("/upload");
//獲取文件名
String fileName = item.getName();
//獲取文件後綴
String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
//設置當前系統時間毫秒數的值爲文件名(無需考慮同步,機率極其低)
String newName = Calendar.getInstance().getTimeInMillis()+fileSuffix;
//File.separator是獲取一個兼容操作系統路徑的"/"
File file = new File(path+File.separator+newName);
try {
//寫入文件
item.write(file);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
}
jsp頁面代碼
<!-- enctype="multipart/form-data"表示不對上傳的消息進行編碼 -->
<form action="upload.do" enctype="multipart/form-data" method="post">
<input type="file" name="fileName">
<input type="submit" value="提交">
這裏注意:上傳後的文件是上傳到TomCat中該的項目的目錄中的upload文件夾,如果將TomCat上項目移除,上傳的文件也會隨之消失。