文件上傳范例
本文采用MyEclipse IDE(8.5版)作為開(kāi)發(fā)工具,Apache Tomcat 6.0.18作為Servlet容器,使用谷歌瀏覽
器進(jìn)行示范。
第一步:依次點(diǎn)擊 File——New —— Web Project,創(chuàng)建web工程,工程名在這里取名demo,其它默
認(rèn)。
第二步:復(fù)制commons-fileupload-1.2.2.jar和commons-io-1.4.jar,在PackageExplorer(工程瀏覽器)中,
將它們拷貝到WebRoot\WEB-INF\lib目錄下,MyEclipse會(huì)自動(dòng)將其加入BuildPath。
第三步:在WebRoot目錄上單擊右鍵,然后依次單擊 New —— JSP,在WebRoot目錄下創(chuàng)建文件上
傳表單頁(yè)面,取名simpleUpload.jsp,在body標(biāo)簽內(nèi)添加如下表單代碼:
<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="開(kāi)始上傳">
</form>
第四步:在src目錄上單擊右鍵,然后依次單擊 New —— Package,創(chuàng)建名為servlets的package。
第五步:在剛創(chuàng)建的 servlets 包上單擊右鍵,然后依次單擊 New —— Servlet,打開(kāi)如下圖窗口:

如圖,為name屬性輸入SimpleUpload,點(diǎn)選doPost方法,其它默認(rèn)即可,單擊next按鈕打開(kāi)如下圖窗口:

單擊Finesh按鈕,將會(huì)創(chuàng)建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>
第六步:打開(kāi)servlets.SimpleUpload.java,將doGet方法中自動(dòng)生成的代碼修改如下:
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");
// 判斷是否多媒體文件上傳請(qǐng)求表單
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
out.println("對(duì)不起,當(dāng)前請(qǐng)求不是一個(gè)多媒體文件上傳請(qǐng)求!");
return;
}
// 如果在應(yīng)用根目錄下沒(méi)有用于存儲(chǔ)上傳文件的simpleUplaodDir目錄,創(chuàng)建該目錄
String path = getServletContext().getRealPath("/simpleUploadDir");
File uploadDir = new File(path);
if (!uploadDir.exists())
uploadDir.mkdir();
DiskFileItemFactory factory = new DiskFileItemFactory();
// 小于指定尺寸(默認(rèn)10KB)的文件直接保存在內(nèi)存中,否則保存在磁盤(pán)臨時(shí)文件夾
factory.setSizeThreshold(1024 * 50);
// 設(shè)置處理上傳文件時(shí)保存臨時(shí)文件的臨時(shí)文件夾,沒(méi)有指定則采用系統(tǒng)默認(rèn)臨時(shí)文件夾
File tempDir = new File(getServletContext().getRealPath("/temp"));
if (!tempDir.exists())
tempDir.mkdir();
factory.setRepository(tempDir);
ServletFileUpload uploader = new ServletFileUpload(factory);
// 設(shè)置單個(gè)上傳文件的最大尺寸限制,參數(shù)為以字節(jié)為單位的long型數(shù)字
uploader.setFileSizeMax(50 * 1024);
// 設(shè)置整個(gè)請(qǐng)求上傳數(shù)據(jù)的最大尺寸限制,參數(shù)為以字節(jié)為單位的long型數(shù)字
uploader.setSizeMax(50 * 1024 * 3);
// 設(shè)置字符編碼
uploader.setHeaderEncoding("UTF-8");
// 解析請(qǐng)求
List<FileItem> list = null;
try {
list = uploader.parseRequest(request);
} catch (FileUploadBase.FileSizeLimitExceededException e) {
// 注意,1.2.1版本沒(méi)有getFieldName和getFileName方法
out.print("請(qǐng)求被拒絕,因?yàn)楸韱斡?/font>" + e.getFieldName() + "上傳的文件"
+ e.getFileName() + "的大小(" + e.getActualSize()
+ ")超出了單個(gè)文件限制的最大尺寸(" + e.getPermittedSize() + ")");
return;
} catch (FileUploadBase.SizeLimitExceededException e) {
out.print("請(qǐng)求被拒絕,因?yàn)檎?qǐng)求消息體的尺寸(" + e.getActualSize() + ")超出了限制的最大尺寸("
+ e.getPermittedSize() + ")");
return;
} catch (FileUploadException e1) {
out.print(e1.getMessage());
return;
}
// 循環(huán)處理每一個(gè)文件項(xiàng)
for (FileItem item : list) {
out.print("表單域名:" + item.getFieldName());
if (item.isFormField()) {
// 處理普通表單域,假設(shè)jsp頁(yè)面設(shè)置字符編碼也是UTF-8
out.print(" 表單域值:" + item.getString("UTF-8") + "<br/>");
} else {
// 將臨時(shí)文件保存到指定目錄
out.print(" 文件名稱(chēng):" + 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工程發(fā)布到tomcat下,在瀏覽器地址欄鍵入如下地址打開(kāi)文件上傳表單頁(yè)面:
http://127.0.0.1:8080/demo/simpleUpload.jsp

填寫(xiě)表單,單擊開(kāi)始上傳按鈕,正常情況下顯示結(jié)果如圖:

鄭州蜂鳥(niǎo)科技有限公司 申林 QQ:38185398 鄭州軟件開(kāi)發(fā)興趣小組群:38236716
學(xué)軟件開(kāi)發(fā),到蜂鳥(niǎo)科技!超強(qiáng)的師資力量 、完善的課程體系 、超低的培訓(xùn)價(jià)格 、真實(shí)的企業(yè)項(xiàng)目。
地址:鄭州市文化路豐產(chǎn)路口東50米豐產(chǎn)路21號(hào)SOHO世紀(jì)城西塔20樓F
電話(huà):0371-63839606 手機(jī):13838505572(申老師) 13673990036 (許老師)
QQ: 1073422643 1群:47614738 2群:108157678
網(wǎng)址:www.ntcsoft.com