servlet + jquery实现文件上传进度条示例代码

  

现在文件的上传,特别是大文件上传,都需要进度条,让客户知道上传进度。
  

  

本文简单记录下如何弄进度条,以及一些上传信息,比如文件的大小,上传速度,预计剩余时间等一些相关信息。代码是匆忙下简单写的,一些验证没做,或代码存在一些隐患,不严谨的地方。本文代码只供参考。
  

  

进度条的样式多种多样,有些网站弄得非常绚烂漂亮。本文UI端不太懂,只会一些简单的基本的css而已,所以进度条弄得不好看。本文侧重的给读者提供一个参考,一个实现思路而已。
  

  

注:由于jQuery版本用的是2.1.1,所以如果跑本例子源码,请用IE9以上或火狐,谷歌浏览器测试。
  

  

 servlet + jquery实现文件上传进度条示例代码

  

 servlet + jquery实现文件上传进度条示例代码”>,</p>
  <p>接收文件上传的servlet <br/>
  </p>
  <p> UploadFileServlet。Java <br/>
  </p>
  
  <pre类=   包com.fei.servlet;      进口java.io.IOException;   进口java.util.Date;   进口java.util.Map;      进口javax.servlet.ServletException;   进口javax.servlet.http.HttpServlet;   进口javax.servlet.http.HttpServletRequest;   进口javax.servlet.http.HttpServletResponse;      进口com.fei.util.FileUploadUtil;      公开课UploadFileServlet扩展HttpServlet {         私有静态最终长serialVersionUID l=1;      公共空间doGet (HttpServletRequest请求,HttpServletResponse响应)   抛出ServletException IOException {   这一点。doPost(请求、响应);   }      公共空间doPost (HttpServletRequest请求,HttpServletResponse响应)   抛出ServletException IOException {   尝试{   长开始=System.currentTimeMillis ();   System.out.println(“开始上传文件.........”);   String> Map<字符串;params=FileUploadUtil.upload(请求);   System.out.println(“文件上传完成.........”);   System.out.println(“文件上次用时:”+ (System.currentTimeMillis()实体法)+“毫秒”);   }捕捉(异常e) {   e.printStackTrace ();   }   }   }   之前      

将上传文件进行下载到服务器的处理
  

  

FileUploadUtil。java
  

        包com.fei.util;      进口java.io.File;   进口java.util.HashMap;   进口java.util.Iterator;   进口并不知道;   进口java.util.Map;      进口javax.servlet.http.HttpServletRequest;      进口org.apache.commons.fileupload.FileItem;   进口org.apache.commons.fileupload.ProgressListener;   进口org.apache.commons.fileupload.disk.DiskFileItemFactory;   进口org.apache.commons.fileupload.servlet.ServletFileUpload;      公开课FileUploadUtil {/* *   *文件上传保存路径   */私有静态最终字符串SAVE_FILEPATH="/类/?/* *   *文件上传临时保存路径   */私有静态最终字符串SAVE_FILE_TMPPATH="/fileupload/tmp/";/* *   *上传文件的最大值M   */私有静态最终int MAX_FILE_SIZE=100 * 1024 * 1024;/* *   *文件数据在内存中超过多少米后,就写入临时文件   */私有静态最终int THRESHOLD_SIZE=2 * 1024 * 1024;      私有静态最终字符串编码=皍tf - 8”;/* *   *处理文件上传的表单   *下载文件,并返回文件名称及普通表单域中其它属性值   *获取文件名   */公共静态Map<字符串,String>上传(HttpServletRequest请求){抛出异常   String> Map<字符串;params=new HashMap<字符串,String> ();      .getServletContext字符串savePath=request.getSession () ()   .getRealPath (SAVE_FILEPATH) + File.separator;   .getServletContext字符串savePathTemp=request.getSession () ()   .getRealPath (SAVE_FILE_TMPPATH) + File.separator;      文件saveFileTempDir=新文件(savePathTemp);      DiskFileItemFactory工厂=new DiskFileItemFactory ();//当内存中文件数据达到THRESHOLD_SIZE后,就写入临时文件中,避免上传大文件时,消化太多内存   factory.setSizeThreshold (THRESHOLD_SIZE);   factory.setRepository (saveFileTempDir);      ServletFileUpload上传=new ServletFileUpload(工厂);   upload.setHeaderEncoding(编码);   upload.setSizeMax (MAX_FILE_SIZE);      FileUploadInfo FileUploadInfo=new FileUploadInfo ();   上传。setProgressListener(新FileUploadListener (fileUploadInfo));   request.getSession()。setAttribute (“uploadInfo fileUploadInfo);      列表项=upload.parseRequest(请求);   迭代器iter=items.iterator ();   int fileNum=1;   而(iter.hasNext ()) {   FileItem项=(FileItem) iter.next ();   如果(item.isFormField()){//普通表单域   item.getString params.put (item.getFieldName () ());   其他}{   字符串文件名=item.getName ()。替换(“/薄ⅰ癨 \”);   int i=fileName.lastIndexOf (“\ \”);   文件名=fileName.substring (i + 1);//避免重复   文件名=System.currentTimeMillis() +文件名;      文件uploadedFile=新文件(savePath +文件名);   item.write (uploadedFile);      参数个数。把(“fileName0”+ fileNum,文件名);   fileNum + +;      }   }         返回参数;   }      }      类FileUploadListener实现ProgressListener {      FileUploadInfo FileUploadInfo=零;      公共FileUploadListener (FileUploadInfo FileUploadInfo) {   这一点。fileUploadInfo=fileUploadInfo;   }      @Override   公共空间更新(长uploadSize, totalSize, int itemNum) {   this.fileUploadInfo.setTotalSize (totalSize);   this.fileUploadInfo.setUploadSize (uploadSize);      }      }   

servlet + jquery实现文件上传进度条示例代码