使用Servlet实现文件上传功能

来源:互联网 发布:错生网络剧 编辑:程序博客网 时间:2024/05/17 22:37

Servlet文件上传实例:

@WebServlet("/servlet/UploadServlet")public class UploadServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * @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        //设置编码,post可以直接utf-8,如果是get的话需要new String(name.getByte("iso8859-1"),"utf-8")的方式进行处理                     request.setCharacterEncoding("UTF-8");          response.setContentType("text/html;charset=UTF-8");          PrintWriter pw = response.getWriter();          try {              //设置系统环境              DiskFileItemFactory factory = new DiskFileItemFactory();              //文件存储的路径              String storePath = getServletContext().getRealPath("/WEB-INF/files");              //判断传输方式  form  enctype=multipart/form-data              boolean isMultipart = ServletFileUpload.isMultipartContent(request);              if(!isMultipart)              {                  pw.write("传输方式有错误!");                  return;              }              ServletFileUpload upload = new ServletFileUpload(factory);              upload.setFileSizeMax(4*1024*1024);//设置单个文件大小不能超过4M              upload.setSizeMax(4*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;                      }                      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);    }    private String makeStorePath(String storePath) {          Date date = new Date();          SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd");          String s = df.format(date);          String path = storePath+"\\"+s;          File file = new File(path);          if(!file.exists())          {              file.mkdirs();//创建多级目录,mkdir只创建一级目录          }          return path;             }  }
原创粉丝点击