1.文件上传的jsp页面
<body> <!--multipart/form-data:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 --> <!-- 所谓不对字符编码:要是是上传文件,就是不对文件内容进行编码 --> <center> <form name="fileupload" action="FileAction" method="POST" enctype="multipart/form-data"> 文件上传:<input id="fileup1" name="fileup1" size="30" type="file" /> <p></p> 文件上传:<input id="fileup2" name="fileup2" size="30" type="file" /> <p></p> 文件上传:<input id="fileup3" name="fileup3" size="30" type="file" /> <p></p> <input type="submit" name="file_sub" id="file_sub" value="上传"/> </form> </center> </body>
?
2.web.xml文件配置
?
<servlet> <description></description> <display-name>FileAction</display-name> <servlet-name>FileAction</servlet-name> <servlet-class>testFileup.FileAction</servlet-class> <init-param> <param-name>uploadfilepath</param-name> <param-value>upload</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>FileAction</servlet-name> <url-pattern>/FileAction</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>FileDownLoad</display-name> <servlet-name>FileDownLoad</servlet-name> <servlet-class>testFileup.FileDownLoad</servlet-class> <init-param> <param-name>uploadfilepath</param-name> <param-value>upload</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>FileDownLoad</servlet-name> <url-pattern>/FileDownLoad</url-pattern> </servlet-mapping>
?
?
?
?3.文件上传部分(用的是org.apache.commons.fileupload)
?
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //得到servlet配置中文件上传的路径 String path=this.getInitParameter("uploadfilepath"); path=this.getServletContext().getRealPath("/")+path;//获得文件存放的物理路径 //path=request.getContextPath()+"\\"+path; System.out.println("文件存放的物理路径:"+path); //System.out.println("文件内容:"+(String)request.getParameter("fileup1")); //是否上传成功 boolean state=false; java.util.List<File> files=new java.util.ArrayList(); try{ //创建一个基于磁盘文件的工厂 DiskFileItemFactory factory=new DiskFileItemFactory(); //setRepository:Sets the directory used to temporarily store files that are larger than the configured size threshold. factory.setRepository(new File(path)); //setSizeThreshold:Sets the size threshold beyond which files are written directly to disk. factory.setSizeThreshold(10); //创建一个文件处理器 ServletFileUpload upload=new ServletFileUpload(factory); //解析请求 //Processes an RFC 1867 compliant multipart/form-data stream. List items=upload.parseRequest(request); //处理文件上传项 //Iterator iter=items.iterator(); //while(iter.hasNext()){ for(int i=0;i<items.size();i++){ //FileItem:This class represents a file or form item that was received within a multipart/form-data POST request. //FileItem item=(FileItem)iter.next(); FileItem item=(FileItem)items.get(i); if(item.isFormField()){ //true if the instance represents a simple form field; //普通请求,可以接受请求中的其他参数 }else{ //文件上传请求 //获得文件上传名 String filename=item.getName(); //filename在IE浏览器获得是具体的文件上传的物理地址,如C:\Documents and Settings\lilang\桌面\5单元-javaWEB开发-13\14.实战报表:jFreeChart,cewolf,iText,jExcel.doc //在firefox获得的是文件的名字,如:2.JSTL应用讲解.doc System.out.println("文件全名:"+filename); if(!filename.equals("")){ int count=filename.lastIndexOf("\\"); if(count>0){ filename=filename.substring(count); }else{ filename="\\"+filename; } File temf=new File(path+filename); System.out.println("保存的路径为:"+temf.getAbsolutePath()); //将文件写入服务器的目录上 item.write(temf); files.add(temf); state=true; } } } }catch(Exception ep){ ep.printStackTrace(); } response.setContentType("text/html;charset=gbk"); PrintWriter out=response.getWriter(); if(state){ while(files.size()>0){ File file=files.remove(0); String filePath=file.getParentFile().getName()+"/"+file.getName(); System.out.println("连接的文件路径:"+filePath); //out.println("<br><a href=\""+filePath+"\">"+file.getName()+"</a>");//不以io输出流来下载文件,直接在浏览器打开 String filename=file.getName(); System.out.println("FileAction--文件名:"+filename); out.println("<br><a href=\"FileDownLoad?filename="+filename+"\">"+file.getName()+"</a>"); }// end while }
?4.文件下载部分
?
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("GB2312"); String filename=request.getParameter("filename"); filename=new String(filename.getBytes("ISO-8859-1")); System.out.println("获得的文件名:"+filename); //filename=URLDecoder.decode(filename,"UTF-8"); //System.out.println("文件名:"+filename); String filePath=this.getServletContext().getRealPath("/")+this.getInitParameter("uploadfilepath")+"\\"+filename; System.out.println("要下载的文件物理路径:"+filePath); response.reset();//可以加也可以不加 response.setContentType("application/x-download"); String filedownload =filePath;//提供下载的文件的物理路径 String filedisplay = filename;//文件下载路径 filedisplay =URLEncoder.encode(filedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filedisplay); ServletOutputStream outp = null; FileInputStream in = null; try { outp = response.getOutputStream(); in = new FileInputStream(filedownload); byte[] b = new byte[in.available()]; int t = 0; while((t= in.read(b)) > 0) { outp.write(b, 0, t); } outp.flush(); } catch(Exception e) { System.out.println("Error!"); e.printStackTrace(); } finally { if(in != null) { in.close(); in = null; } if(outp != null) { outp.close(); outp = null; } } }