主要是通过UploadListener 监听服务端接收了多少字节,返回给客户端,由javascript,div,css来操作进度条的显示
public class UploadListener implements OutputStreamListener
{
private HttpServletRequest request;
private long delay = 0;
private long startTime = 0;
private int totalToRead = 0;
private int totalBytesRead = 0;
private int totalFiles = -1;
public UploadListener(HttpServletRequest request, long debugDelay)
{
this.request = request;
this.delay = debugDelay;
totalToRead = request.getContentLength();
this.startTime = System.currentTimeMillis();
}
public void start()
{
totalFiles ++;
updateUploadInfo("start");
}
public void bytesRead(int bytesRead)
{
totalBytesRead = totalBytesRead + bytesRead;
updateUploadInfo("progress");
try
{
Thread.sleep(delay);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
public void error(String message)
{
updateUploadInfo("error");
}
public void done()
{
updateUploadInfo("done");
}
private long getDelta()
{
return (System.currentTimeMillis() - startTime) / 1000;
}
private void updateUploadInfo(String status)
{
long delta = (System.currentTimeMillis() - startTime) / 1000;
request.getSession().setAttribute("uploadInfo", new UploadInfo(totalFiles, totalToRead, totalBytesRead,delta,status));
}
}
上面的代码中,原作者为了演示本机操作上的显示效果,特别加入了debugDelay做延时处理,在实际应用中可以删除。
upload.jsp:
<%@ page import="be.telio.mediastore.ui.upload.MonitoredDiskFileItemFactory" %>
<%@ page import="be.telio.mediastore.ui.upload.UploadListener" %>
<%@ page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="org.apache.commons.fileupload.FileItemFactory" %>
<%@ page import="org.apache.commons.fileupload.FileUploadException" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--
/* Licence:
* Use this however/wherever you like, just don't blame me if it breaks anything.
*
* Credit:
* If you're nice, you'll leave this bit:
*
* Class by Pierre-Alexandre Losson -- http://www.telio.be/blog
* email : plosson@users.sourceforge.net
*/
--%>
<%
UploadListener listener = new UploadListener(request, 30);
// Create a factory for disk-based file items
FileItemFactory factory = new MonitoredDiskFileItemFactory(listener);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
// process uploads ..
upload.parseRequest(request);
//....处理上传文件
}
catch (FileUploadException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
%>
整个应用已经打包放在附件里,请下载研究。
分享到:
相关推荐
Ajax实现文件上传进度条,Ajax实现文件上传进度条Ajax实现文件上传进度条Ajax实现文件上传进度条Ajax实现文件上传进度条。
ajax上传文件,ajax实现进度条,及springMvc上传文件实现进度条
文件上传进度条的简单实现,如果有不当的地方还望批评指出,谢谢!
ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)
Ajax + Servlet 实现上传文件进度条显示
随着ajax技术的流行以及用户体验得到越来越高的重视,各种注视用户体验的程序出现,比如带进度条的文件上传,看了网上很多资料还没找到真正意义上的ASP.NET实现进度条上传.Ajax 文件上传进度条,ASP.NET 文件上传...
用Ajax实现上传文件进度条,做的非常漂亮
要实现文件上传进度条,我们需要使用到Layui的AjaxUpload组件,该组件可以用来上传文件并显示上传进度。我们可以使用`layui.upload`方法来上传文件,并使用`on`方法来监听上传进度。 例如: ```javascript layui....
AJAXFileUpload ajax 异步文件上传 进度条AJAXFileUpload ajax 异步文件上传 进度条
ajax上传进度条,想知道上传进度和原理的同学请下载,文件中附带本人联系方式,不懂可以远程的哦!24小时在线等候您
要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 重写的解析器提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后将此数据缓存起来,前端发送异步...
ajax文件上传带进度条,带判断上传文件是否合法,ajax实现上传文件带进度条。
ajax 无刷新上传文件带进度条 不下是你的损失!
在web应用中,客户端向服务器传送大文件是常用功能。在上传过程中,不给用户提供当前上传进度...本文中包含的知识点包括:进度条的实现、本地文件读取到字节数组、ajax等。这些知识点都可以在容百川上传的资料中得到。
博文链接:https://daihoufa.iteye.com/blog/184212
带有进度条的上传源码 无刷新 AJAX 用户操作性好。vs2003 vs2005都有
使用java+ajax技术 上传文件带进度条
初次整理有点乱,见谅, uploadify 的具体使用见我的博客: http://blog.csdn.net/tianlele_xl/article/details/6151964
asp Ajax无刷新文件上传(带进度条,无组件) 技术交流网址WWW.94X.NET
本文实例介绍了js结合HTML5 Ajax实现文件上传进度条功能,分享给大家供大家参考,具体内容如下 1. lib.js var Host = [removed].host; //--Cookie function setCookie(name,value) { var Days = 30; var exp =...