1,、上傳文件(擴展) (1)編程步驟 step1,設(shè)置表單的提交方式為"post",還要設(shè)置表單的enctype屬性值為"multipart/form-data"; 比如:<form action="" method="post"enctype="multipart/form-data"> step2,在服務(wù)器端,不能夠使用request.getParameter方法了,,要使用InputStream request.getInputStream方法,。 此時,需要分析InputStream。一般使用一些工具(比如,apache提供的commons-fileupload)來分析這個InputStream,。 ------------------------------------------------------------------------------------------------- package web; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //factory對象為解析器提供解析時的一些缺省的配置 DiskFileItemFactory factory = new DiskFileItemFactory(); //創(chuàng)建一個解析器 ServletFileUpload sfu = new ServletFileUpload(factory); //使用解析器解析inputStream try { /* * 解析器將每一個表單域中的數(shù)據(jù) * 封裝到一個FileItem對象里面,。 */ List<FileItem> items = sfu.parseRequest(request); /* * 只需要遍歷List<FileItem>集合,就可以 * 讀取每一個表單域中的數(shù)據(jù),。 */ for(int i=0;i<items.size();i++){ FileItem item = items.get(i); if(item.isFormField()){ //普通的表單域 String uname = item.getString(); System.out.println(uname); }else{ //上傳文件域 ServletContext sctx = getServletContext(); //依據(jù)邏輯路徑獲得實際部署時的物理路徑 String path = sctx.getRealPath("upload"); System.out.println("path:" + path); //獲得上傳文件的名稱 String filename = item.getName(); /*fileupload工具有一個bug,在某些操作系統(tǒng)上運行時,,filename會包含路徑,比如 d:\czh\man1.jpg */ filename = filename.substring(filename.lastIndexOf("/") + 1); System.out.println("filename:" + filename); File file = new File(path +File.separator + filename); item.write(file); } } } catch (Exception e) { e.printStackTrace(); throw new ServletException(e); } } } |
|