现在文件的上传,特别是大文件上传,都需要进度条,让客户知道上传进度。
本文简单记录下如何弄进度条,以及一些上传信息,比如文件的大小,上传速度,预计剩余时间等一些相关信息。代码是匆忙下简单写的,一些验证没做,或代码存在一些隐患,不严谨的地方。本文代码只供参考。
进度条的样式多种多样,有些网站弄得非常绚烂漂亮。本文UI端不太懂,只会一些简单的基本的css而已,所以进度条弄得不好看。本文侧重的给读者提供一个参考,一个实现思路而已。
注:由于jQuery版本用的是2.1.1,所以如果跑本例子源码,请用IE9以上或火狐,谷歌浏览器测试。
包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实现文件上传进度条示例代码