上传下载

来源:互联网 发布:算法电子书 编辑:程序博客网 时间:2024/04/28 23:46

结构:

src

      com.servletdemo

                                    DownloadServlet.java

                                    UploadServlet.java

 webContent

                      files --文件夹

                     jsp

                          servlet

                                      fileupload.jsp

                    WEB-INF

                                  web.xml

                                   lib

                                       commons-fileupload-1.2.1.jar

                                       commons-io-1.3.2.jar

                                       javax.servlet.jar

DownloadServlet

package com.servletdemo;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class DownloadServlet */@WebServlet("/servlet/DownloadServlet")public class DownloadServlet extends HttpServlet {    private static final long serialVersionUID = 1L;           /**     * @see HttpServlet#HttpServlet()     */    public DownloadServlet() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        download1(request,response);     }    /**     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)     */    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        doGet(request, response);    }        public void download1(HttpServletRequest request,HttpServletResponse response) throws IOException{          //获取所要下载文件的路径            String path = "D://ProgramFiles/files";            String fileName = request.getParameter("fileName");          if(fileName == null || "null".equals(fileName)){          path = getFile(path);          }else{          path = path+"/"+fileName;          }          System.out.println("fileName="+fileName+"path = "+path);          String realPath = path.substring(path.lastIndexOf("/")+1);                 //告诉浏览器是以下载的方法获取到资源           //告诉浏览器以此种编码来解析URLEncoder.encode(realPath, "utf-8"))         response.setHeader("content-disposition","attachment; filename="+URLEncoder.encode(realPath, "utf-8"));          //获取到所下载的资源            FileInputStream fis = new FileInputStream(path);            int len = 0;             byte [] buf = new byte[1024];             while((len=fis.read(buf))!=-1){                 response.getOutputStream().write(buf,0,len);             }        }        private static String getFile(String path){           // get file list where the path has           File file = new File(path);           // get the folder list           File[] array = file.listFiles();         String fileName = null;                  for(int i=0;i<array.length;i++){               if(array[i].isFile()){                   // only take file name   //                System.out.println("^^^^^" + array[i].getName());                   // take file path and name   //                System.out.println("#####" + array[i]);                   // take file path and name   //                System.out.println("*****" + array[i].getPath());                 fileName = array[i].getPath();                break;            }else if(array[i].isDirectory()){   //                getFile(array[i].getPath());            break;            }        }        return fileName;    }    public static void main(String[] args) {    String name = getFile("D://ProgramFiles/files");    System.out.println("name="+name);}}

UploadServlet.java
package com.servletdemo;import java.io.File;  import java.io.FileOutputStream;  import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStream;  import java.io.PrintWriter;  import java.text.DateFormat;  import java.util.Date;  import java.util.List;  import java.util.UUID;  import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;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.FileUploadException;  import org.apache.commons.fileupload.ProgressListener;  import org.apache.commons.fileupload.disk.DiskFileItemFactory;  import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class UploadServlet */@WebServlet("/servlet/UploadServlet")public class UploadServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    private String fileNames;           /**     * @see HttpServlet#HttpServlet()     */    public UploadServlet() {        super();        // TODO Auto-generated constructor stub    }    /**     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        //设置编码          request.setCharacterEncoding("UTF-8");          response.setContentType("text/html;charset=UTF-8");          PrintWriter pw = response.getWriter();          try {              //设置系统环境              DiskFileItemFactory factory = new DiskFileItemFactory();              //文件存储的路径    String storePath = "D://ProgramFiles/files";            String storePath = "D://ProgramFiles/files";            //判断传输方式  form  enctype=multipart/form-data              boolean isMultipart = ServletFileUpload.isMultipartContent(request);              if(!isMultipart)              {                  pw.write("传输方式有错误!");                  return;              }              ServletFileUpload upload = new ServletFileUpload(factory);              upload.setFileSizeMax(20*1024*1024);//设置单个文件大小不能超过4M              upload.setSizeMax(30*1024*1024);//设置总文件上传大小不能超过6M              //监听上传进度              upload.setProgressListener(new ProgressListener() {                    //pBytesRead:当前以读取到的字节数                  //pContentLength:文件的长度                  //pItems:第几项                  public void update(long pBytesRead, long pContentLength,                          int pItems) {                      System.out.println("已读去文件字节 :"+pBytesRead+" 文件总长度:"+pContentLength+"   第"+pItems+"项");                                        }              });              //解析              List<FileItem> items = upload.parseRequest(request);              for(FileItem item: items)              {                  if(item.isFormField())//普通字段,表单提交过来的                  {                      String name = item.getFieldName();                      String value = item.getString("UTF-8");                      System.out.println(name+"=="+value);                  }else                  {  //                  String mimeType = item.getContentType(); 获取上传文件类型  //                  if(mimeType.startsWith("image")){                      InputStream in =item.getInputStream();                      String fileName = item.getName();                       if(fileName==null || "".equals(fileName.trim()))                      {                          continue;                      }                      fileNames = fileName;                    System.out.println("fileNames="+fileNames);                    fileName = fileName.substring(fileName.lastIndexOf("\\")+1);  //                    fileName = UUID.randomUUID()+"_"+fileName;                                            //按日期来建文件夹                      String newStorePath = makeStorePath(storePath);                      String storeFile = newStorePath+"\\"+fileName;                      OutputStream out = new FileOutputStream(storeFile);                      byte[] b = new byte[1024];                      int len = -1;                      while((len = in.read(b))!=-1)                      {                           out.write(b,0,len);                              }                      in.close();                      out.close();                      item.delete();//删除临时文件                  }                }  //          }          }catch(org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException e){                 //单个文件超出异常              pw.write("单个文件不能超过4M");          }catch(org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException e){              //总文件超出异常              pw.write("总文件不能超过6M");                        }catch (FileUploadException e) {              e.printStackTrace();          }    }    /**     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)     */    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // TODO Auto-generated method stub        doGet(request, response);        response.sendRedirect("/Demo1/servlet/DownloadServlet?fileName="+fileNames);    }        private String makeStorePath(String storePath) {          //        Date date = new Date();  //        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);  //        String s = df.format(date);  //        String path = storePath+"\\"+s;       String path = storePath;          File file = new File(path);          if(!file.exists())          {              file.mkdirs();//创建多级目录,mkdir只创建一级目录          }          return path;                 }     private String makeStorePath2(String storePath, String fileName) {          int hashCode = fileName.hashCode();          int dir1 = hashCode & 0xf;// 0000~1111:整数0~15共16个          int dir2 = (hashCode & 0xf0) >> 4;// 0000~1111:整数0~15共16个                String path = storePath + "\\" + dir1 + "\\" + dir2; // WEB-INF/files/1/12          File file = new File(path);          if (!file.exists())              file.mkdirs();                return path;      } }

fileupload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%  String path = request.getContextPath();  String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Upload File Demo</title></head><body><form action="${pageContext.request.contextPath}/servlet/UploadServlet" method="post" enctype="multipart/form-data">     user name<input type="text" name="username"/> <br/>     <input type="file" name="f1"/><br/>     <input type="file" name="f2"/><br/>     <input type="submit" value="save"/>   </form></body></html>      

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  <display-name>Demo3</display-name>  <welcome-file-list>    <welcome-file>/jsp/servlet/fileupload.jsp</welcome-file>  </welcome-file-list></web-app>


0 0
原创粉丝点击