JSP Servlet文件上傳的實(shí)現(xiàn)淺析
JSP Servlet文件上傳的實(shí)現(xiàn)首先就是環(huán)境和軟件的準(zhǔn)備:
common-fileupload組件
下載地址:http://jakarta.apache.org/commons/fileupload/
下載后解壓zip包,將commons-fileupload-1.0.jar復(fù)制到tomcat的webapps\你的webapp\WEB-INF\lib\下
Create a servlet
- import java.io.*;
- import java.util.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- import org.apache.commons.fileupload.*;
- public class Upload extends HttpServlet {
- private String uploadPath = "C:\\upload\\"; // 用于存放上傳文件的目錄
- private String tempPath = "C:\\upload\\tmp\\"; // 用于存放臨時(shí)文件的目錄
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws IOException, ServletException
- {
- try {
- DiskFileUpload fu = new DiskFileUpload();
- // 設(shè)置最大文件尺寸,這里是4MB
- fu.setSizeMax(4194304);
- // 設(shè)置緩沖區(qū)大小,這里是4kb
- fu.setSizeThreshold(4096);
- // 設(shè)置臨時(shí)目錄:
- fu.setRepositoryPath(tempPath);
- // 得到所有的文件:
- List fileItems = fu.parseRequest(request);
- Iterator i = fileItems.iterator();
- // 依次處理每一個(gè)文件:
- while(i.hasNext()) {
- FileItem fi = (FileItem)i.next();
- // 獲得文件名,這個(gè)文件名包括路徑:
- String fifileName = fi.getName();
- if(fileName!=null) {
- // 在這里可以記錄用戶和文件信息
- // ...
- // 寫入文件a.txt,你也可以從fileName中提取文件名:
- fi.write(new File(uploadPath + "a.txt"));
- }
- }
- // 跳轉(zhuǎn)到上傳成功提示頁面
- }
- catch(Exception e) {
- // 可以跳轉(zhuǎn)出錯(cuò)頁面
- }
- }
- }
當(dāng)Servlet收到瀏覽器發(fā)出的Post請(qǐng)求后,在doPost()方法中實(shí)現(xiàn)文件上傳。以下是示例代碼:
如果要在配置文件中讀取指定的上傳文件夾,可以在init()方法中執(zhí)行:
- public void init() throws ServletException {
- uploadPath = ....
- tempPath = ....
- // 文件夾不存在就自動(dòng)創(chuàng)建:
- if(!new File(uploadPath).isDirectory())
- new File(uploadPath).mkdirs();
- if(!new File(tempPath).isDirectory())
- new File(tempPath).mkdirs();
- }
Servlet文件上傳之配置Servlet,用記事本打開tomcat\webapps\你的webapp\WEB-INF\web.xml,沒有的話新建一個(gè)。典型配置如下:
- ﹤?xml version="1.0" encoding="ISO-8859-1"?﹥
- ﹤!DOCTYPE web-app
- PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd"﹥
- ﹤web-app﹥
- ﹤servlet﹥
- ﹤servlet-name﹥Upload﹤/servlet-name﹥
- ﹤servlet-class﹥Upload﹤/servlet-class﹥
- ﹤/servlet﹥
- ﹤servlet-mapping﹥
- ﹤servlet-name﹥Upload﹤/servlet-name﹥
- ﹤url-pattern﹥/fileupload﹤/url-pattern﹥
- ﹤/servlet-mapping﹥
- ﹤/web-app﹥
Servlet文件上傳之收尾:配置好Servlet后,啟動(dòng)Tomcat,寫一個(gè)簡(jiǎn)單的html測(cè)試:
- ﹤form action="fileupload" method="post" enctype="multipart/form-data" name="form1"﹥
- ﹤input type="file" name="file"﹥
- ﹤input type="submit" name="Submit" value="upload"﹥
- ﹤/form﹥
注意action="fileupload"其中fileupload是配置servlet時(shí)指定的url-pattern。
那么JSP Servlet文件上傳的實(shí)現(xiàn)就完成了,在開發(fā)思路上你是否有了一點(diǎn)變化呢?
【編輯推薦】