亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

servlet+jquery實現文件上傳進度條示例代碼

2019-11-19 17:47:04
字體:
來源:轉載
供稿:網友

現在文件的上傳,特別是大文件上傳,都需要進度條,讓客戶知道上傳進度。

本文簡單記錄下如何弄進度條,以及一些上傳信息,比如文件的大小,上傳速度,預計剩余時間等一些相關信息。代碼是匆忙下簡單寫的,一些驗證沒做,或代碼存在一些隱患,不嚴謹的地方。本文代碼只供參考。

進度條的樣式多種多樣,有些網站弄得非常絢爛漂亮。本文UI端不太懂,只會一些簡單的基本的css而已,所以進度條弄得不好看。本文側重的給讀者提供一個參考,一個實現思路而已。

注:由于jQuery版本用的是2.1.1,所以如果跑本例子源碼,請用IE9以上或火狐、谷歌瀏覽器測試。

 

接收文件上傳的servlet

UploadFileServlet.Java

package com.fei.servlet;  import java.io.IOException; import java.util.Date; import java.util.Map;  import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  import com.fei.util.FileUploadUtil;  public class UploadFileServlet extends HttpServlet {       private static final long serialVersionUID = 1L;    public void doGet(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {     this.doPost(request, response);   }    public void doPost(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {     try {       long start = System.currentTimeMillis();       System.out.println("開始上傳文件........." );       Map<String, String> params = FileUploadUtil.upload(request);       System.out.println("文件上傳完成........." );       System.out.println("文件上次用時:"+(System.currentTimeMillis()-start)+"毫秒");     } catch (Exception e) {       e.printStackTrace();     }   } } 

將上傳文件進行下載到服務器的處理

FileUploadUtil.java

package com.fei.util;  import java.io.File; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;  import javax.servlet.http.HttpServletRequest;  import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.ProgressListener; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;  public class FileUploadUtil {    /**    * 文件上傳保存路徑    */   private static final String SAVE_FILEPATH = "/fileupload/";   /**    * 文件上傳臨時保存路徑    */   private static final String SAVE_FILE_TMPPATH = "/fileupload/tmp/";   /**    * 上傳文件的最大值M    */   private static final int MAX_FILE_SIZE = 100*1024*1024;   /**    * 文件數據在內存中超過多少M后,就寫入臨時文件    */   private static final int THRESHOLD_SIZE = 2*1024*1024;      private static final String ENCODING = "UTF-8";      /**    * 處理文件上傳的表單    * 下載文件,并返回文件名稱及普通表單域中其它屬性值    * 獲取文件名    */   public static Map<String,String> upload(HttpServletRequest request)throws Exception{     Map<String,String> params = new HashMap<String, String>();          String savePath = request.getSession().getServletContext()         .getRealPath(SAVE_FILEPATH)+ File.separator;     String savePathTemp = request.getSession().getServletContext()         .getRealPath(SAVE_FILE_TMPPATH)+ File.separator;          File saveFileTempDir = new File(savePathTemp);          DiskFileItemFactory factory = new DiskFileItemFactory();     //當內存中文件數據達到THRESHOLD_SIZE后,就寫入臨時文件中,避免上傳大文件時,消化太多內存     factory.setSizeThreshold(THRESHOLD_SIZE);     factory.setRepository(saveFileTempDir);          ServletFileUpload upload = new ServletFileUpload(factory);     upload.setHeaderEncoding(ENCODING);     upload.setSizeMax(MAX_FILE_SIZE);          FileUploadInfo fileUploadInfo = new FileUploadInfo();     upload.setProgressListener(new FileUploadListener(fileUploadInfo));     request.getSession().setAttribute("uploadInfo", fileUploadInfo);          List items = upload.parseRequest(request);     Iterator iter = items.iterator();     int fileNum = 1;     while(iter.hasNext()){       FileItem item = (FileItem) iter.next();       if (item.isFormField()) {//普通表單域         params.put(item.getFieldName(), item.getString());       } else {         String fileName = item.getName().replace("/", "http://");         int i = fileName.lastIndexOf("http://");         fileName = fileName.substring(i+1);         //避免重復         fileName = System.currentTimeMillis() + fileName;                  File uploadedFile = new File(savePath + fileName);         item.write(uploadedFile);                  params.put("fileName0"+fileNum, fileName);         fileNum ++;        }     }               return params;   }    }  class FileUploadListener implements ProgressListener{    FileUploadInfo fileUploadInfo = null;      public FileUploadListener(FileUploadInfo fileUploadInfo) {     this.fileUploadInfo = fileUploadInfo;   }      @Override   public void update(long uploadSize, long totalSize, int itemNum) {     this.fileUploadInfo.setTotalSize(totalSize);     this.fileUploadInfo.setUploadSize(uploadSize);        }    } 

上傳文件的一些信息

FileUploadInfo.java

package com.fei.util;  public class FileUploadInfo {    private final int K = 1024;      private final int M = K * 1024;      /**    * 總大小    */   private long totalSize;   /**    * 開始上傳時間    */   private long startTime = System.currentTimeMillis();   /**    * 已上傳多少    */   private long uploadSize;      /**    * 上傳速度(K/S)    */   public double getUploadSpeed_K(){     long currentTime = System.currentTimeMillis();     long usedTime = currentTime - startTime;     if(usedTime == 0.0){       return 0.0;     }     return getUploadSize_K()/usedTime*1000d;   }   /**    * 獲取已上傳百分比    * @return    */   public double getUploadPercent(){     return (getUploadSize()*1.00/getTotalSize())*100d;   }   /**    * 剩余時間(s)    * @return    */   public double getRemainTime(){     double speedKB = getUploadSpeed_K();     if(speedKB<= 0.00){       return -1d;     }     return (getTotalSize_K() - getUploadSize_K())/speedKB;   }   /**    * 已上傳時間    * @return    */   public double getUseTime(){     return (System.currentTimeMillis() - startTime)/1000d;   }      public long getTotalSize() {     return totalSize;   }      public double getTotalSize_K(){     return getTotalSize()*1.0/K;   }      public double getTotalSize_M(){     return getTotalSize()*1.0/M;   }      public long getUploadSize() {     return uploadSize;   }      public double getUploadSize_K(){     return getUploadSize()/K;   }      public double getUploadSize_M(){     return getUploadSize()/M;   }      public void setTotalSize(long totalSize) {     this.totalSize = totalSize;   }         public void setUploadSize(long uploadSize) {     this.uploadSize = uploadSize;   }      private String double2String(double d){     return String.format("%.2f", d);   }      public String toString(){     return "{"+         "'totalSize':'"+double2String(getTotalSize_M())+"M',"+         "'uploadSize':'"+double2String(getUploadSize_M())+"M',"+         "'uploadSpeed':'"+double2String(getUploadSpeed_K())+"KB/s',"+         "'uploadPrecent':'"+double2String(getUploadPercent())+"',"+         "'remainTime':'"+(getRemainTime()<0?"未知":double2String(getRemainTime()))+"s"+"',"+         "'useTime':'"+double2String(getUseTime())+"s' "+         "}";   } } 

讀取文件上傳進度的servlet

UploadFileProgressServlet.java

package com.fei.servlet;  import java.io.IOException;  import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  import com.fei.util.FileUploadInfo;  public class UploadFileProgressServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    public void doGet(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {     this.doPost(request, response);   }      public void doPost(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {     String responseContent = "";          Object obj = request.getSession().getAttribute("uploadInfo");     if(obj == null){       responseContent = "{'data':'NoData'}";     }else{       FileUploadInfo uploadInfo = (FileUploadInfo)obj;       responseContent = uploadInfo.toString();       if(uploadInfo.getUploadPercent()== 100.0){         request.getSession().setAttribute("uploadInfo", null);       }     }     System.out.println("文件上次情況:"+responseContent);     response.getWriter().print(responseContent);   } } 

前臺頁面upload2.html

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="js/jquery-2.1.1.js" type="text/javascript"></script>  <script > var falseNum = 0; $(document).ready(function(){   $('#subbut').bind('click',       function(){         $('#fForm').submit();         var eventFun = function(){           $.ajax({             type: 'GET',             url: '/uploadtest/UploadFileProgressServlet.do',             data: {},             dataType: 'text',             success : function(resData){               //如果10次都失敗,那就不要繼續訪問了               if(falseNum > 10){                window.clearInterval(intId);                return;               }               var obj = eval("("+resData+")");               if(obj.data == 'NoData'){                 falseNum ++ ;                 return;               }               $("#graphbox").css('display','block');               $(".progressbar").css('width',obj.uploadPrecent+'%');               $("#uploadPer").html(obj.uploadPrecent+'%');               $("#progressInfo").html('總大小:'+obj.totalSize                   +',速度:'+obj.uploadSpeed                   +'%,剩余時間:'+obj.remainTime+',已用時間:'+obj.useTime);               if(obj.uploadPrecent == 100){                 window.clearInterval(intId);                 $("#progressInfo").html("上傳成功!");               }           }});};         var intId = window.setInterval(eventFun,500);   }); }); </script> <style> #graphbox{ border:1px solid #e7e7e7; padding:5px; width:350px; background-color:#f8f8f8; margin:5px 0; display:none; } .graph{ position:relative; background-color:#F0EFEF; border:1px solid #cccccc; padding:2px; font-size:10px; font-weight:500; } .graph .progressbar{ position:relative; text-align:right; color:#ffffff; height:10px; line-height:10px; font-family:Arial; display:block; } .graph .progressbar{background-color:#66CC33;}  </style> </head> <body>     <form id='fForm' class="form-actions form-horizontal" action="/uploadtest/UploadFileServlet.do"         encType="multipart/form-data" target="uploadf" method="post">          <div class="control-group">           <label class="control-label">上傳文件:</label>           <div class="controls">             <input type="file" name="file" style="width:350px"></br>             <input type="file" name="file2" style="width:350px"></br>             <button type="button" id="subbut" class="btn">上傳</button>             </div>           <div id="graphbox">             <div class="graph">             <span class="progressbar" style="width:0%;"><span id="uploadPer"></span></span>             </div>           </div>           <div id='progressInfo'>           </div>         </div>     </form>     <iframe name="uploadf" style="display:none"></iframe> </body> </html> 

將項目部署到tomcat(或其他web容器),訪問http://172.16.126.128:8080/uploadtest/upload2.html

效果:


代碼下載:demo

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品视频免费专区在线播放| 亚洲国产精品久久| 国产亚洲精品高潮| 91久久国产精品| 国产在线高清精品| 91亚洲一区精品| 久久久噜噜噜久久中文字免| 亚洲免费伊人电影在线观看av| 久久视频国产精品免费视频在线| 色综久久综合桃花网| 国产精品视频久久久| 精品欧美激情精品一区| 亚洲黄色www| 欧美在线观看视频| 中文字幕久久久| 国产精品av在线| 久久91亚洲精品中文字幕奶水| 国产美女精品视频免费观看| 亚洲国产日韩精品在线| 亚洲成人黄色在线| 中文字幕精品www乱入免费视频| 亚洲欧美中文另类| 久久视频在线直播| 久久精品国产一区二区电影| 午夜免费久久久久| 日韩精品999| 成人激情综合网| 日韩视频免费大全中文字幕| 国产精品露脸自拍| 久久久久久久亚洲精品| 欧美电影免费观看高清| 欧美性猛交xxxx黑人| 国产精品精品视频一区二区三区| 日本中文字幕成人| 日韩极品精品视频免费观看| 蜜臀久久99精品久久久无需会员| 国产一区二区三区三区在线观看| 日韩在线激情视频| 国产91免费观看| 77777亚洲午夜久久多人| 97免费中文视频在线观看| 国产www精品| 影音先锋欧美在线资源| 国产日韩欧美在线视频观看| 国产有码一区二区| 国产日韩欧美在线视频观看| 久久男人资源视频| 青青精品视频播放| 国产美女精品免费电影| 欧美性猛交xxxx偷拍洗澡| 欧美xxxx18性欧美| 成人精品福利视频| 一本色道久久综合亚洲精品小说| 中文字幕久热精品在线视频| 欧美日韩精品在线观看| 清纯唯美日韩制服另类| 国产拍精品一二三| 中文字幕自拍vr一区二区三区| 综合网中文字幕| 国产欧美日韩视频| 欧美自拍大量在线观看| 欧美成年人视频| 尤物yw午夜国产精品视频| 国产成人精品日本亚洲| 中文字幕成人精品久久不卡| 欧美交受高潮1| 青青草成人在线| 精品夜色国产国偷在线| 超碰精品一区二区三区乱码| 国产一区二区三区毛片| 国外成人性视频| 国产精品一二三在线| 欧美极度另类性三渗透| 精品动漫一区二区三区| 欧美电影免费观看| 91av视频在线播放| 美女精品视频一区| 富二代精品短视频| 91免费看视频.| 欧美精品成人在线| 亚洲美女又黄又爽在线观看| 欧美午夜无遮挡| 欧美黑人又粗大| 久久国产天堂福利天堂| 久久久久中文字幕2018| 日韩中文字幕在线精品| 国产亚洲精品高潮| 久久久女人电视剧免费播放下载| 搡老女人一区二区三区视频tv| 欧美黑人一级爽快片淫片高清| 欧美日韩国产一中文字不卡| 日韩激情片免费| 另类视频在线观看| 欧美日本啪啪无遮挡网站| 久久99精品视频一区97| 日韩大胆人体377p| 国色天香2019中文字幕在线观看| 亚洲欧洲国产一区| 激情亚洲一区二区三区四区| 亚洲男人天堂视频| 亚洲free性xxxx护士hd| 欧美午夜影院在线视频| 欧美亚洲另类在线| 午夜精品美女自拍福到在线| 国产一区二区三区视频在线观看| 国产精品欧美亚洲777777| 成人黄色中文字幕| 欧美亚洲午夜视频在线观看| 亚洲视频axxx| 欧美激情国产日韩精品一区18| 日韩亚洲第一页| 亚洲欧美日韩图片| 在线电影欧美日韩一区二区私密| 亚洲精品久久久久中文字幕欢迎你| 97欧美精品一区二区三区| 欧美大人香蕉在线| 国产狼人综合免费视频| 伊人一区二区三区久久精品| 高清欧美一区二区三区| 欧洲亚洲女同hd| 狠狠操狠狠色综合网| 亚洲视频一区二区| 2025国产精品视频| 国产一级揄自揄精品视频| 久久久久久97| 欧美性色视频在线| 51视频国产精品一区二区| 欧美成人中文字幕在线| 亚洲国产精品va在线观看黑人| 亚洲欧美国产精品| 亚洲人成欧美中文字幕| 91精品久久久久久| 欧美性猛交xxxx黑人| 亚洲精品一区在线观看香蕉| 78m国产成人精品视频| 亚洲欧美国产制服动漫| 国产精品热视频| 中文字幕精品久久| 精品亚洲一区二区三区| 国产精品白丝jk喷水视频一区| 久久久国产在线视频| 亚洲国产精久久久久久| 亚洲人成电影在线观看天堂色| 国产精品丝袜久久久久久不卡| 国产精品亚洲аv天堂网| 国产在线日韩在线| 91高清免费在线观看| 国产大片精品免费永久看nba| 国产精品女人网站| 久久久久免费精品国产| 国产精品96久久久久久| 欧美日韩在线观看视频小说| 久久亚洲精品小早川怜子66| 亚洲美女黄色片| 国产美女精品免费电影| 国产91精品视频在线观看| 精品国产精品自拍| 国产精品久久久久久超碰| 91天堂在线视频| 国产精品欧美一区二区三区奶水| 亚洲第一国产精品| 成人免费观看网址| 中文字幕日韩综合av| 日韩精品中文字幕视频在线|