文件上傳范例
本文采用MyEclipse IDE(8.5版)作為開發工具,Apache Tomcat 6.0.18作為Servlet容器,使用谷歌瀏覽
器進行示范。
第一步:依次點擊 File——New —— Web Project,創建web工程,工程名在這里取名demo,其它默
認。
第二步:復制commons-fileupload-1.2.2.jar和commons-io-1.4.jar,在PackageExplorer(工程瀏覽器)中,
將它們拷貝到WebRoot\WEB-INF\lib目錄下,MyEclipse會自動將其加入BuildPath。
第三步:在WebRoot目錄上單擊右鍵,然后依次單擊 New —— JSP,在WebRoot目錄下創建文件上
傳表單頁面,取名simpleUpload.jsp,在body標簽內添加如下表單代碼:
<form action="<%=request.getContextPath()%>/servlet/SimpleUpload"
enctype="multipart/form-data" method="post">
文本1:<input type="text" name="text1" value="文本1"><br>
文件2:<input type="text" name="text2" value="文本2"><br>
文件1:<input type="file" name="file1"><br>
文件2:<input type="file" name="file2"><br>
文件2:<input type="file" name="file3"><br>
<input type="submit" value="開始上傳">
</form>
第四步:在src目錄上單擊右鍵,然后依次單擊 New —— Package,創建名為servlets的package。
第五步:在剛創建的 servlets 包上單擊右鍵,然后依次單擊 New —— Servlet,打開如下圖窗口:

如圖,為name屬性輸入SimpleUpload,點選doPost方法,其它默認即可,單擊next按鈕打開如下圖窗口:

單擊Finesh按鈕,將會創建servlets.SimpleUpload.java,并在WebRoot\WEB-INF\web.xml中添加如下代碼:
<servlet>
<servlet-name>SimpleUpload</servlet-name>
<servlet-class>servlet.SimpleUpload</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleUpload</servlet-name>
<url-pattern>/servlet/SimpleUpload</url-pattern>
</servlet-mapping>
第六步:打開servlets.SimpleUpload.java,將doGet方法中自動生成的代碼修改如下:
public class SimpleUpload extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
response.setContentType("text/html;charset=UTF-8");
// 判斷是否多媒體文件上傳請求表單
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
out.println("對不起,當前請求不是一個多媒體文件上傳請求!");
return;
}
// 如果在應用根目錄下沒有用于存儲上傳文件的simpleUplaodDir目錄,創建該目錄
String path = getServletContext().getRealPath("/simpleUploadDir");
File uploadDir = new File(path);
if (!uploadDir.exists())
uploadDir.mkdir();
DiskFileItemFactory factory = new DiskFileItemFactory();
// 小于指定尺寸(默認10KB)的文件直接保存在內存中,否則保存在磁盤臨時文件夾
factory.setSizeThreshold(1024 * 50);
// 設置處理上傳文件時保存臨時文件的臨時文件夾,沒有指定則采用系統默認臨時文件夾
File tempDir = new File(getServletContext().getRealPath("/temp"));
if (!tempDir.exists())
tempDir.mkdir();
factory.setRepository(tempDir);
ServletFileUpload uploader = new ServletFileUpload(factory);
// 設置單個上傳文件的最大尺寸限制,參數為以字節為單位的long型數字
uploader.setFileSizeMax(50 * 1024);
// 設置整個請求上傳數據的最大尺寸限制,參數為以字節為單位的long型數字
uploader.setSizeMax(50 * 1024 * 3);
// 設置字符編碼
uploader.setHeaderEncoding("UTF-8");
// 解析請求
List<FileItem> list = null;
try {
list = uploader.parseRequest(request);
} catch (FileUploadBase.FileSizeLimitExceededException e) {
// 注意,1.2.1版本沒有getFieldName和getFileName方法
out.print("請求被拒絕,因為表單域" + e.getFieldName() + "上傳的文件"
+ e.getFileName() + "的大小(" + e.getActualSize()
+ ")超出了單個文件限制的最大尺寸(" + e.getPermittedSize() + ")");
return;
} catch (FileUploadBase.SizeLimitExceededException e) {
out.print("請求被拒絕,因為請求消息體的尺寸(" + e.getActualSize() + ")超出了限制的最大尺寸("
+ e.getPermittedSize() + ")");
return;
} catch (FileUploadException e1) {
out.print(e1.getMessage());
return;
}
// 循環處理每一個文件項
for (FileItem item : list) {
out.print("表單域名:" + item.getFieldName());
if (item.isFormField()) {
// 處理普通表單域,假設jsp頁面設置字符編碼也是UTF-8
out.print(" 表單域值:" + item.getString("UTF-8") + "<br/>");
} else {
// 將臨時文件保存到指定目錄
out.print(" 文件名稱:" + item.getName() + "<br/>");
String fileName = item.getName();
String filepath = uploadDir.getAbsolutePath() + "/" + fileName;
try {
item.write(new File(filepath));
} catch (Exception e) {
out.print(e.getMessage());
return;
}
out.print("<img src=\"" + request.getContextPath()
+ "/simpleUploadDir/" + fileName + "\" />" + "<br/>");
}
}
out.flush();
out.close();
}
}
將demo工程發布到tomcat下,在瀏覽器地址欄鍵入如下地址打開文件上傳表單頁面:
http://127.0.0.1:8080/demo/simpleUpload.jsp

填寫表單,單擊開始上傳按鈕,正常情況下顯示結果如圖:

鄭州蜂鳥科技有限公司 申林 QQ:38185398 鄭州軟件開發興趣小組群:38236716
學軟件開發,到蜂鳥科技!超強的師資力量 、完善的課程體系 、超低的培訓價格 、真實的企業項目。
地址:鄭州市文化路豐產路口東50米豐產路21號SOHO世紀城西塔20樓F
電話:0371-63839606 手機:13838505572(申老師) 13673990036 (許老師)
QQ: 1073422643 1群:47614738 2群:108157678
網址:www.ntcsoft.com