java一款支持批量上传的代码示例
2013-03-20 10:46
281 查看
效果图如下:
该工程包含五个源文件:BackGroundService.java、BeanControler.java、EventListenerImpl.java、FileUploadListener.java和FileUploadStatus.java;以及2个jsp页面。源码已提供免费下载,下载后直接部署到tomcat中运行即可。
BackGroundService.java:
BeanControler.java:
EventListenerImpl.java:
FileUploadListener.java:
FileUploadStatus.java:
主页面index.jsp:
上传处理页面index2.jsp:
该工程包含五个源文件:BackGroundService.java、BeanControler.java、EventListenerImpl.java、FileUploadListener.java和FileUploadStatus.java;以及2个jsp页面。源码已提供免费下载,下载后直接部署到tomcat中运行即可。
BackGroundService.java:
package liuzuochen.sample.upload; /** * <p>Title: 后台服务</p> * * <p>Description: 为客户端提供上传及文件传输状态查询服务</p> * */ import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.*; public class BackGroundService extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { public static final String UPLOAD_DIR = "/upload"; public static final String DEFAULT_UPLOAD_FAILURE_URL = "index2.jsp"; public BackGroundService() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * 从文件路径中取出文件名 */ private String takeOutFileName(String filePath) { int pos = filePath.lastIndexOf(File.separator); if (pos > 0) { return filePath.substring(pos + 1); } else { return filePath; } } /** * 从request中取出FileUploadStatus Bean */ public static FileUploadStatus getStatusBean( HttpServletRequest request) { BeanControler beanCtrl = BeanControler.getInstance(); return beanCtrl.getUploadStatus(request.getRemoteAddr()); } /** * 把FileUploadStatus Bean保存到类控制器BeanControler */ public static void saveStatusBean( HttpServletRequest request, FileUploadStatus statusBean) { statusBean.setUploadAddr(request.getRemoteAddr()); BeanControler beanCtrl = BeanControler.getInstance(); beanCtrl.setUploadStatus(statusBean); } /** * 删除已经上传的文件 */ private void deleteUploadedFile(HttpServletRequest request) { FileUploadStatus satusBean = getStatusBean(request); for (int i = 0; i < satusBean.getUploadFileUrlList().size(); i++) { File uploadedFile = new File(request.getRealPath(UPLOAD_DIR) + File.separator + satusBean.getUploadFileUrlList(). get(i)); uploadedFile.delete(); } satusBean.getUploadFileUrlList().clear(); satusBean.setStatus("删除已上传的文件"); saveStatusBean(request, satusBean); } /** * 上传过程中出错处理 */ private void uploadExceptionHandle( HttpServletRequest request, String errMsg) throws ServletException, IOException { //首先删除已经上传的文件 deleteUploadedFile(request); FileUploadStatus satusBean = getStatusBean(request); satusBean.setStatus(errMsg); saveStatusBean(request, satusBean); } /** * 初始化文件上传状态Bean */ private FileUploadStatus initStatusBean(HttpServletRequest request) { FileUploadStatus satusBean = new FileUploadStatus(); satusBean.setStatus("正在准备处理"); satusBean.setUploadTotalSize(request.getContentLength()); satusBean.setProcessStartTime(System.currentTimeMillis()); satusBean.setBaseDir(request.getContextPath() + UPLOAD_DIR); return satusBean; } /** * 处理文件上传 */ private void processFileUpload(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { DiskFileItemFactory factory = new DiskFileItemFactory(); //设置内存缓冲区,超过后写入临时文件 factory.setSizeThreshold(10240000); //设置临时文件存储位置 factory.setRepository(new File(request.getRealPath("/upload/temp"))); ServletFileUpload upload = new ServletFileUpload(factory); //设置单个文件的最大上传值 upload.setFileSizeMax(5*102400000); //设置整个request的最大值 upload.setSizeMax(10*102400000); upload.setProgressListener(new FileUploadListener(request)); //保存初始化后的FileUploadStatus Bean saveStatusBean(request, initStatusBean(request)); FileUploadStatus satusBean = getStatusBean(request); String forwardURL = ""; int flag=1; try { List items = upload.parseRequest(request); //获得返回url for (int i = 0; i < items.size(); i++) { FileItem item = (FileItem) items.get(i); if (item.isFormField()) { forwardURL = item.getString(); break; } } //处理文件上传 for (int i = 0; i < items.size(); i++) { FileItem item = (FileItem) items.get(i); //取消上传 if (getStatusBean(request).getCancel()) { deleteUploadedFile(request); break; } //保存文件 else if (!item.isFormField() && item.getName().length() > 0) { String fileName = takeOutFileName(item.getName()); File uploadedFile = new File(request.getRealPath(UPLOAD_DIR) + File.separator + fileName); item.write(uploadedFile); flag++; //更新上传文件列表 satusBean.getUploadFileUrlList().add(fileName); saveStatusBean(request, satusBean); //Thread.sleep(500); } } } catch (FileUploadException e) { uploadExceptionHandle(request, "上传文件时发生错误:" + e.getMessage()); } catch (Exception e) { uploadExceptionHandle(request, "保存上传文件时发生错误:" + e.getMessage()); } if (forwardURL.length() == 0) { forwardURL = DEFAULT_UPLOAD_FAILURE_URL; } request.setAttribute("msg", "<font size=2><b>文件上传成功!</b></font>"); request.getRequestDispatcher("index2.jsp").forward(request, response); } /** * 回应上传状态查询 */ private void responseStatusQuery(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); FileUploadStatus satusBean = getStatusBean(request); response.setCharacterEncoding("gbk"); response.getWriter().write(satusBean.toJSon()); } /** * 处理取消文件上传 */ private void processCancelFileUpload(HttpServletRequest request, HttpServletResponse response) throws IOException { FileUploadStatus satusBean = getStatusBean(request); satusBean.setCancel(true); saveStatusBean(request, satusBean); responseStatusQuery(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { processFileUpload(request, response); } else { request.setCharacterEncoding("gbk"); if (request.getParameter("uploadStatus") != null) { responseStatusQuery(request, response); } if (request.getParameter("cancelUpload") != null) { processCancelFileUpload(request, response); } } } }
BeanControler.java:
package liuzuochen.sample.upload; /** * <p>Title: 类控制器</p> * * <p>Description: 主要作用是对FileUploadStatus进行管理,为客户端提供相应的 * FileUploadStatus类对象。这是一个单例类。</p> * */ import java.util.Vector; public class BeanControler { private static BeanControler beanControler = new BeanControler(); private Vector vector = new Vector(); private BeanControler() { } public static BeanControler getInstance() { return beanControler; } /** * 取得相应FileUploadStatus类对象的存储位置 */ private int indexOf(String strID) { int nReturn = -1; for (int i = 0; i < vector.size(); i++) { FileUploadStatus status = (FileUploadStatus) vector.elementAt(i); if (status.getUploadAddr().equals(strID)) { nReturn = i; break; } } return nReturn; } /** * 取得相应FileUploadStatus类对象 */ public FileUploadStatus getUploadStatus(String strID) { return (FileUploadStatus) vector.elementAt(indexOf(strID)); } /** * 存储FileUploadStatus类对象 */ public void setUploadStatus(FileUploadStatus status) { int nIndex = indexOf(status.getUploadAddr()); if ( -1 == nIndex) { vector.add(status); } else { vector.insertElementAt(status, nIndex); vector.removeElementAt(nIndex + 1); } } /** * 删除FileUploadStatus类对象 */ public void removeUploadStatus(String strID){ int nIndex = indexOf(strID); if(-1!=nIndex) vector.removeElementAt(nIndex); } }
EventListenerImpl.java:
package liuzuochen.sample.upload; import javax.servlet.http.HttpServletRequest; import com.enterprisedt.net.ftp.EventListener; import com.enterprisedt.util.debug.Logger; public class EventListenerImpl implements EventListener { public static long transferedbyte=0; public static long totalfilesize=0; public static long flag=0; private Logger log = Logger.getLogger(EventListenerImpl.class); private static int cuNum=0; private HttpServletRequest request=null; public static long totalReadBytes=0; public static long totalReadByteses=0; public static int numflag=1; public EventListenerImpl(int cuNum,long filesize,HttpServletRequest request) { EventListenerImpl.totalfilesize=0; EventListenerImpl.transferedbyte=0; EventListenerImpl.flag=0; this.cuNum=cuNum; this.request=request; EventListenerImpl.totalReadBytes=0; this.totalReadBytes=filesize; totalReadByteses+=totalReadBytes; } public static void setTotalSize(long temp) { EventListenerImpl.totalfilesize=temp; } public void bytesTransferred(String connId, String remoteFilename, long bytes) { EventListenerImpl.transferedbyte=bytes; FileUploadStatus statusBean= BackGroundService.getStatusBean(request); statusBean.setUploadTotalSize(FileUploadListener.totalFileSize); //读取完成 if (FileUploadListener.totalFileSize ==this.transferedbyte) { statusBean.setStatus("完成对" + FileUploadListener.currentFileNum +"个文件的FTP处理 " + FileUploadListener.totalFileSize + " bytes."); statusBean.setReadTotalSize(this.transferedbyte); statusBean.setSuccessUploadFileCount(FileUploadListener.currentFileNum); statusBean.setProcessEndTime(System.currentTimeMillis()); statusBean.setProcessRunningTime(statusBean.getProcessEndTime()); statusBean.setUploadFlag("ftp"); //读取中 } else { statusBean.setStatus("当前正在进行第" +cuNum +"个文件的FTP文件上传:已经处理了 " + (bytes+totalReadByteses-totalReadBytes) + " / " + FileUploadListener.totalFileSize+ " bytes."); statusBean.setReadTotalSize(bytes+totalReadByteses-totalReadBytes); statusBean.setCurrentUploadFileNum(cuNum); statusBean.setProcessRunningTime(System.currentTimeMillis()); statusBean.setUploadFlag("ftp"); } BackGroundService.saveStatusBean(request,statusBean); } /** * Log an FTP command being sent to the server. Not used for SFTP. * * @param cmd command string */ public void commandSent(String connId, String cmd) { } /** * Log an FTP reply being sent back to the client. Not used for * SFTP. * * @param reply reply string */ public void replyReceived(String connId, String reply) { } /** * Notifies that a download has started * * @param remoteFilename remote file name */ public void downloadStarted(String connId, String remoteFilename) { } /** * Notifies that a download has completed * * @param remoteFilename remote file name */ public void downloadCompleted(String connId, String remoteFilename) { } /** * Notifies that an upload has started * * @param remoteFilename remote file name */ public void uploadStarted(String connId, String remoteFilename) { EventListenerImpl.transferedbyte=0; } /** * Notifies that an upload has completed * * @param remoteFilename remote file name */ public void uploadCompleted(String connId, String remoteFilename) { EventListenerImpl.transferedbyte=0; EventListenerImpl.totalfilesize=0; EventListenerImpl.flag=-1; } public static long returnFlag() { return EventListenerImpl.flag; } public static long getTransferedbyte() { return transferedbyte; } public static long getTotalfilesize() { return totalfilesize; } }
FileUploadListener.java:
package liuzuochen.sample.upload; import org.apache.commons.fileupload.ProgressListener; import javax.servlet.http.HttpServletRequest; public class FileUploadListener implements ProgressListener{ private HttpServletRequest request=null; public FileUploadListener(HttpServletRequest request){ this.request=request; } public static int currentFileNum=0; public static long totalFileSize=0; /** * 更新状态 */ public void update(long pBytesRead, long pContentLength, int pItems){ FileUploadStatus statusBean= BackGroundService.getStatusBean(request); statusBean.setUploadTotalSize(pContentLength); EventListenerImpl.setTotalSize(pContentLength); //读取完成 if (pContentLength == -1) { statusBean.setStatus("完成对" + pItems +"个文件的读取:读取了 " + pBytesRead + " bytes."); statusBean.setReadTotalSize(pBytesRead); statusBean.setSuccessUploadFileCount(pItems); statusBean.setProcessEndTime(System.currentTimeMillis()); statusBean.setProcessRunningTime(statusBean.getProcessEndTime()); statusBean.setUploadFlag("http"); //读取中 } else { statusBean.setStatus("当前正在处理第" +(pItems+1)/3 +"个文件的客户端上传:已经读取了 " + pBytesRead + " / " + pContentLength+ " bytes."); statusBean.setReadTotalSize(pBytesRead); statusBean.setCurrentUploadFileNum((pItems+1)/3); statusBean.setProcessRunningTime(System.currentTimeMillis()); statusBean.setUploadFlag("http"); } BackGroundService.saveStatusBean(request,statusBean); } }
FileUploadStatus.java:
package liuzuochen.sample.upload; import java.util.*; public class FileUploadStatus { //上传用户地址 private String uploadAddr; //上传总量 private long uploadTotalSize = 0; //读取上传总量 private long readTotalSize = 0; //当前上传文件号 private int currentUploadFileNum = 0; //成功读取上传文件数 private int successUploadFileCount = 0; //状态 private String status = ""; //处理起始时间 private long processStartTime = 0l; //处理终止时间 private long processEndTime = 0l; //处理执行时间 private long processRunningTime = 0l; //上传文件URL列表 private List uploadFileUrlList = new ArrayList(); //取消上传 private boolean cancel = false; //上传base目录 private String baseDir = ""; private String uploadFlag=""; public FileUploadStatus() { } public String getBaseDir() { return baseDir; } public void setBaseDir(String baseDir) { this.baseDir = baseDir; } public boolean getCancel() { return cancel; } public void setCancel(boolean cancel) { this.cancel = cancel; } public List getUploadFileUrlList() { return uploadFileUrlList; } public void setUploadFileUrlList(List uploadFileUrlList) { this.uploadFileUrlList = uploadFileUrlList; } public long getProcessRunningTime() { return processRunningTime; } public void setProcessRunningTime(long processRunningTime) { this.processRunningTime = processRunningTime; } public long getProcessEndTime() { return processEndTime; } public void setProcessEndTime(long processEndTime) { this.processEndTime = processEndTime; } public long getProcessStartTime() { return processStartTime; } public void setProcessStartTime(long processStartTime) { this.processStartTime = processStartTime; } public long getReadTotalSize() { return readTotalSize; } public void setReadTotalSize(long readTotalSize) { this.readTotalSize = readTotalSize; } public int getSuccessUploadFileCount() { return successUploadFileCount; } public void setSuccessUploadFileCount(int successUploadFileCount) { this.successUploadFileCount = successUploadFileCount; } public int getCurrentUploadFileNum() { return currentUploadFileNum; } public void setCurrentUploadFileNum(int currentUploadFileNum) { this.currentUploadFileNum = currentUploadFileNum; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public long getUploadTotalSize() { return uploadTotalSize; } public String getUploadAddr() { return uploadAddr; } public void setUploadTotalSize(long uploadTotalSize) { this.uploadTotalSize = uploadTotalSize; } public void setUploadAddr(String uploadAddr) { this.uploadAddr = uploadAddr; } public String toJSon() { StringBuffer strJSon = new StringBuffer(); strJSon.append("{UploadTotalSize:").append(getUploadTotalSize()).append( ",") .append("ReadTotalSize:").append(getReadTotalSize()).append(",") .append("CurrentUploadFileNum:").append(getCurrentUploadFileNum()). append(",") .append("SuccessUploadFileCount:").append( getSuccessUploadFileCount()).append(",") .append("Status:'").append(getStatus()).append("',") .append("ProcessStartTime:").append(getProcessStartTime()). append(",") append("',") .append("Cancel:").append(getCancel()).append("}"); return strJSon.toString(); } public String getUploadFlag() { return uploadFlag; } public void setUploadFlag(String uploadFlag) { this.uploadFlag = uploadFlag; } }
主页面index.jsp:
<%@ page language="java" import="java.util.*" 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"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <style> body { background: #ffffff; color: #444; } a { color: #07c; text-decoration: none; border: 0; background-color: transparent; } body, div, q, iframe, form, h5 { margin: 0; padding: 0; } img, fieldset { border: none 0; } body, td, textarea { word-break: break-all; word-wrap: break-word; line-height:1.6; } body, input, textarea, select, button { margin: 0; font-size: 14px; font-family: Tahoma, SimSun, sans-serif; } div, p, table, th, td { font-size:1em; font-family:inherit; line-height:inherit; } h5 { font-size:12px; } ol li,ul li{ margin-bottom:0.5em;} pre, code { font-family: "Courier New", Courier, monospace; word-wrap:break-word; line-height:1.4; font-size:12px;} pre{background:#f6f6f6; border:#eee solid 1px; margin:1em 0.5em; padding:0.5em 1em;} #content { padding-left:50px; padding-right:50px; } #content h2 { font-size:20px; color:#069; padding-top:8px; margin-bottom:8px; } #content h3 { margin:8px 0; font-size:14px; COLOR:#693; } #content h4 { margin:8px 0; font-size:16px; COLOR:#690; } #content div.item { margin-top:10px; margin-bottom:10px; border:#eee solid 4px; padding:10px; } hr { clear:both; margin:7px 0; +margin: 0; border:0 none; font-size: 1px; line-height:1px; color: #069; background-color:#069; height: 1px; } .infobar { background:#fff9e3; border:1px solid #fadc80; color:#743e04; } </style> <script type="text/javascript" src="zDrag.js"></script> <script type="text/javascript" src="zDialog.js"></script> <script type="text/javascript"> var diag; var initHeight=180; function openWindow() { diag = new Dialog(); diag.Width = 680; diag.Height = initHeight; diag.Title = "文件上传窗口"; diag.URL = "index2.jsp"; diag.show(); } function addHeight() { diag.setSize(680,initHeight+30); initHeight=initHeight+30; } function decreaseHeight() { diag.setSize(680,initHeight-30); initHeight=initHeight-30; } function closeWindow() { diag.close(); } function resizeHeight() { initHeight=180; diag.setSize(680,180); } function addProgressHeight() { diag.setSize(680,initHeight+80); } </script> </head> <body> <input type="button" value="上传文件" onclick="openWindow();"/> </body> </html>
上传处理页面index2.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript" src="zDrag.js"></script> <script type="text/javascript" src="zDialog.js"></script> <script type="text/javascript" src="./javascript/prototype.js" charset="utf-8"></script> <script type="text/javascript" src="./javascript/AjaxWrapper.js" charset="utf-8"></script> <link href="./css/fileUpload.css" type="text/css" rel="stylesheet"/> <style type="text/css"> div#readme{ width:100%;padding:3px 0;background: #BAFB80; background-image: url("images/info_32.png"); background-repeat: no-repeat; text-align: center; font:85%/1.45 "Lucida Sans Unicode","Lucida Grande",Arial,sans-serif; font-size:medium; font-weight: bold; line-height: 25px; height: 25px; color:gray; } </style> <style> </style> <script type="text/javascript"> var flag=1; function getFileSize(fileSize) { var num = new Number(); var unit = ''; if (fileSize > 1*1024*1024*1024){ num = fileSize/1024/1024/1024; unit = "G" } else if (fileSize > 1*1024*1024){ num = fileSize/1024/1024; unit = "M" } else if (fileSize > 1*1024){ num = fileSize/1024; unit = "K" } else{ return fileSize; } return num.toFixed(2) + unit; } function addRow() { if(flag>4) { Dialog.alert('<font size=2><b>一次最多上传5个文件!</b></font>'); return; } var form=document.getElementById('tool'); var text1 = document.createElement("input"); text1.size = "60"; text1.type = "text"; text1.name = "txt"+flag+1; text1.id = "txt"+flag+1; text1.className='input_text'; var btn1= document.createElement("input"); btn1.name='uploadfile'+flag+1; btn1.id='uploadfile'+flag+1; btn1.size=40; btn1.value='浏览...'; btn1.className="uploadfile2"; btn1.hidefocus=''; var inputNode1 = document.createElement("input"); inputNode1.size = "30"; inputNode1.type = "file"; inputNode1.name = "file"+flag+1; inputNode1.id = "file"+flag+1; inputNode1.className='input_file'; if(inputNode1.addEventListener) { inputNode1.addEventListener("change",changeValue(text1,inputNode1),false); } else if(inputNode1.attachEvent) { inputNode1.attachEvent("onchange", changeValue(text1,inputNode1)) ; } var inputNode3 = document.createElement("a"); inputNode3.href = "javascript:void(0);"; var img=document.createElement("img"); img.src='images/delete.png'; img.width=28; img.height=28; img.border='0'; img.className='imgstyle'; img.alt='删除一行'; inputNode3.appendChild(img); if(inputNode3.addEventListener) { inputNode3.addEventListener("click",deleterow(form,text1,btn1,inputNode1,inputNode3),false); } else if(inputNode3.attachEvent) { inputNode3.attachEvent("onclick", deleterow(form,text1,btn1,inputNode1,inputNode3)) ; } form.appendChild(text1); form.appendChild(btn1); form.appendChild(inputNode1); form.appendChild(inputNode3); flag++; parent.addHeight(); } var changeValue=function changeValue(v1,v2) { return function() { v1.value=v2.value; } } function init() { var btn1=document.getElementById('uploadfile2'); btn1.size=40; btn1.value='浏览...'; btn1.className="uploadfile2"; } var deleterow = function(form,text1,btn1,inputNode1,inputNode3){ return function(){ form.removeChild(text1); form.removeChild(btn1); form.removeChild(inputNode1); form.removeChild(inputNode3); flag--; parent.decreaseHeight(); } } function closeWindow() { parent.closeWindow(); } </script> </head> <body onload="init();"> <div id="controlPanel"> <div id="readme">说明: 最大上传量:1000M,单个文件最大容量:100M</div> <div id="uploadFileUrl"></div> <form id="fileUploadForm" name="fileUploadForm" action="./BackGroundService.action" enctype="multipart/form-data" method="post"> <input class="input_text" type="text" id="txt1" name="txt1" size="60"/><input type="button" name="uploadfile2" id="uploadfile2" style="padding-left: 26px;"/><input class="input_file" size="30" type="file" name="file1" id="file1" hidefocus onchange="txt1.value=this.value"/><a href="javascript:void(0);" onclick="addRow();"><img src="images/add.png" width="28" height="28" border="0" alt="添加一行" class="imgstyle"/></a><br> <div id="tool"> </div> <br> <input type="submit" name="uploadButton" id="uploadButton" value="开始上传" class="up_btn"/> <input type="button" name="cancelUploadButton" onclick="closeWindow();" id="cancelUploadButton" value="取消上传" class="up_btn"/><br> </form> <div id="progressBar"> <div id="theMeter"> <div id="progressBarText"></div> <div id="totalProgressBarBox"> <div id="totalProgressBarBoxContent"></div> </div> </div> <div id="progressStatusText"></div> </div> </div> <script> Element.hide('progressBar'); Event.observe('fileUploadForm','submit',startProgress,false); Event.observe('cancelUploadButton','click',cancelProgress,false); //刷新上传状态 function refreshUploadStatus(){ var ajaxW = new AjaxWrapper(false); ajaxW.putRequest( './BackGroundService.action', 'uploadStatus=', function(responseText){ eval("uploadInfo = " + responseText); var progressPercent = Math.ceil( (uploadInfo.ReadTotalSize) / uploadInfo.UploadTotalSize * 100); if(uploadInfo.UploadFlag=='http'){ flag='(HTTP状态)'; }else { flag='(FTP状态)'; } $('progressBarText').innerHTML=flag; $('progressBarText').innerHTML += ' 上传处理进度: '+progressPercent+'% 【'+ getFileSize(uploadInfo.ReadTotalSize)+'/'+getFileSize(uploadInfo.UploadTotalSize) + '】 正在处理第'+uploadInfo.CurrentUploadFileNum+'个文件'+ ' 耗时: '+(uploadInfo.ProcessRunningTime-uploadInfo.ProcessStartTime)+' ms'; $('progressStatusText').innerHTML=' 反馈状态: '+uploadInfo.Status; $('totalProgressBarBoxContent').style.width = parseInt(progressPercent * 3.5) + 'px'; } ); } //上传处理 function startProgress(){ parent.addProgressHeight(); Element.show('progressBar'); $('progressBarText').innerHTML = ' 上传处理进度: 0%'; $('progressStatusText').innerHTML=' 反馈状态:'; $('uploadButton').disabled = true; $('cancelUploadButton').disabled = true; var periodicalExe=new PeriodicalExecuter(refreshUploadStatus,0.5); return true; } //取消上传处理 function cancelProgress(){ $('cancelUploadButton').disabled = true; var ajaxW = new AjaxWrapper(false); ajaxW.putRequest( './BackGroundService.action', 'cancelUpload=true', //因为form的提交,这可能不会执行 function(responseText){ eval("uploadInfo = " + responseText); $('progressStatusText').innerHTML=' 反馈状态: '+uploadInfo.status; if (msgInfo.cancel=='true'){ alert('删除成功!'); window.location.reload(); }; } ); } </script> <% String msg=(String)request.getAttribute("msg"); if(msg!=null&&msg.length()>0) { %> <script type="text/javascript"> Dialog.alert('<%=msg%>'); parent.resizeHeight(); </script> <% } %> </body> </html>源码下载地址:http://download.csdn.net/detail/xuweilinjijis/5160835
相关文章推荐
- java代码模拟页面上传文件至服务器(支持https上传)
- WebUploader的java后端上传代码(支持分片上传)(未测试)
- java 上传文件代码,支持中文文件名和中文文件内容,可以同时提交多个参数
- Java 批量文件压缩导出并下载到本地示例代码
- java后台接收app上传的图片的示例代码
- 主题:共享一个FCKEditor,支持多种编程语言代码高亮,Java文件上传并UUID命名
- java接收ios文件上传的示例代码
- Java实现拖拽文件上传dropzone.js的简单使用示例代码
- eoLinker-API_Shop_短信服务接口-调用示例代码,支持PHP、Python、Java等语言
- Java FTP上传下载单个文件示例代码
- 用Java实现FTP批量大文件上传下载代码及示例下载
- java实现文件上传下载和图片压缩代码示例
- java使用spring实现读写分离的示例代码
- java语言中封装类代码示例
- Java语言实现最大堆代码示例
- 在java中使用dom4j解析xml(示例代码)
- 支持firefox10和IE的上传预览图片js代码
- 在java中使用dom4j解析xml(示例代码)
- ckeditor 自定义上传图片,丢弃原来的上传 示例代码
- java 自动生成略缩图示例代码