servlet.Ajax实现上传文件进度条

2023-10-31

这里关于servlet如何上传文件就先不说了,将如何得到已经上传的文件数据的百分比...


首先我们先写一个类这个类要实现ProgressListener这个接口,实现里面的update(...)方法.代码如下

package com.test.servlet;

import java.text.DecimalFormat;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.ProgressListener;

public class UploadProgressListener implements ProgressListener
{
	
	private HttpServletRequest request = null ;

	private DecimalFormat decimalFormat = new DecimalFormat("#00.0");
	
	
	
	public UploadProgressListener(HttpServletRequest request)
	{
		this.request = request;
	}
	
	public void update(long pBytesRead, long pContentLength, int pItems)
	{
		
		 double percent= (double)pBytesRead*100/(double)pContentLength; 
		 
		 String hadDownloadPercent = decimalFormat.format(percent).toString();
	
		request.getSession().setAttribute("hadDownloadPercent",hadDownloadPercent) ;
		
	}

}

这个类写完之后,我们再写一个servlet,这个servlet用于被Ajax在短暂的时间内不断请求数据,比如请求间隔是100ms


上代码


package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ReadProgressInSessionServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
	{
HttpSession session = request.getSession();
		
		String hadDownloadPercent = (String)session.getAttribute("hadDownloadPercent");
		
		response.setCharacterEncoding("utf-8");
		
		PrintWriter printWriter = response.getWriter();
		
		printWriter.write(hadDownloadPercent);
		
		printWriter.flush();
	}

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
	{

	this.doGet(request,response);
		
	}

}


还有一个就是上传文件的核心类


ServletFileUpload servletFileUpload = new ServletFileUpload(
				diskFileItemFactory);

		servletFileUpload.setProgressListener(new UploadProgressListener(req));

其中req是HttpServletRequest对象 UploadProgressListener是ProgressListener接口的实现类...



最后就是通过JavaScript频繁的发起http请求,也就是Ajax...不过这种方式可能对服务器性能造成影响...


	
		function f()
		{
			var demonstrateHadUploadFileSizeArea = document.getElementById("demonstrateHadUploadFileSizeArea");
			
			var idiv=document.getElementById('hadUploadPercent');
			var ibox=document.getElementById('demonstrateArea');
			
			var url = "ReadProgressInSessionServlet"  ;
			
			
			
			//alert(url);
			
			var xmlHttpRequest = null ;
			
			if(window.ActiveXObject)	
			{
				xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
				
			}
			else if(window.XMLHttpRequest)	
			{
				xmlHttpRequest = new XMLHttpRequest();
			}
			
			if(null != xmlHttpRequest)
			{
				
				xmlHttpRequest.open("GET", url.toString(), true);
				
				xmlHttpRequest.onreadystatechange = ajaxCallBack;

				xmlHttpRequest.send(null);
			}
			
			function ajaxCallBack()
			{
				if(xmlHttpRequest.readyState == 4)
				{
					if(xmlHttpRequest.status == 200)
					{
						
						
						var responseText = xmlHttpRequest.responseText;
						
						//demonstrateHadUploadFileSizeArea.innerHTML = responseText;
						
						var iWidth = responseText;
						
						idiv.style.width=idiv.offsetWidth+1+'px';
						
						idiv.innerHTML= Math.round(iWidth)+"%";
						
					}
				}
			}
			
		}
		
		function g()
		{
			setInterval("f()",5);
			
		}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

servlet.Ajax实现上传文件进度条 的相关文章

随机推荐

  • 20、计算机图形学——微平面理论和Cook-Torrance BRDF

    一 微平面理论 如下图中的海面 从远处看 就像镜子一样平整 反光很强烈 但是从近处看 却能法线 海平面是有微小的凹凸不平 可以认为 海平面是由无数个微小的镜面组成 而每个微小的镜面都有法线 如果法线的分布地较为密集 如下图中上面的情况 那么
  • 高防CDN和高防IP的各自优势

    服务器配置中高防IP与高防CDN各自的优势分别是什么 为了更好地防止由于进攻造成 的网络服务器偏瘫 营运商们一般 会挑选具有 高防御服务器 来开展经营 如果是在经营全过程中遭受了进攻 不愿去拆换网络服务器得话 这个时候 就可以选用加上高仿I
  • Gravatar镜像源自建教程,使用CDN加速无需配置反代

    什么是 Gravatar Gravatar 是 Globally Recognized Avatar 的缩写 是 Gravatar 推出的一项服务 意为 全球通用头像 如果在 Gravatar 的服务器上放置了你自己的头像 那么在任何支持
  • D3DCompiler_47.dll丢失怎么解决-D3DCompiler_47.dll丢失怎么办

    d3dcompiler47dll丢失怎么解决 很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑的该dll文件没有或者损坏了 这时你只需下载这个d3dcom
  • 大数据从入门到精通(超详细版)之HDFS详解,学不会算我输!!!

    前言 嗨 各位小伙伴 恭喜大家学习到这里 不知道关于大数据前面的知识遗忘程度怎么样了 又或者是对大数据后面的知识是否感兴趣 本文是 大数据从入门到精通 超详细版 的一部分 小伙伴们如果对此感谢兴趣的话 推荐大家按照大数据学习路径开始学习哦
  • eProsima Fast DDS Documentation翻译

    eProsima Fast DDS Documentation eProsima Fast DDS 是 DDS Data Distribution Service 协议的一个C 语言实现版本 该协议由 Object Management G
  • wind matlab接口函数,使用wind量化接口函数wss时出现问题'CWSSService: repeated windcodes.'...

    我之前运行了一次程序 是可以运行的 在把MATLAB关掉一次后 再打开运行 从WIND中下载的数据中只有这一句提示 本来应该是下载某年某月末所有非ST 非停牌 上市超过六个月的A股的收盘价和PE值的 代码如下 load mydata mat
  • Python爬虫(入门+进阶)学习笔记 2-5 Scrapy的中间件

    上一节我们学习怎么去保存爬取的结果 然而大多数时候裸奔的请求很容易被网站反爬技术识别 导致并不能获取到我们想要的数据 我们该怎么做呢 中间件就可以帮你解决这些事 下载中间件 Downloader middlewares Scrapy框架中的
  • spring-jms

    为什么要在博客上总结一下 那么多优秀的博客 网站上的都很清楚 这就好比老师的板书写的再好 和你半毛钱关系没有 总结理解消化为自己的东西才有用 如果看了就能记住能懂 那人人都是专家 因此总结 归纳尤为重要 百度百科给出的 定义 JMS Jav
  • vtk vs2015 win10 64bit 编译注意事项

    记录几个凌乱的关键点 事先安装Qt 我得是5 8版本 需要官网注册之类的 1 关于Python 编译带tcl java python的 vtk 需要很多繁琐的步骤 记录整个过程太恐怖了 vtk暂时不支持python3 支持的还是python
  • XSS Payload绕过云锁学习

    前言 对于我这个菜鸟来说 我通过谷歌百度学习到很多前辈的资料 甚至每句话都是他的指导 我也很感激前辈的为我们铺设的道路 让我们更快的成长起来 我也乐于分享 可能有些知识点过于单调或者久远 请见谅 WAF 前几天花了10买了一个月的服务器 换
  • springboot注解@Order的使用

    使用order属性 设置该类在spring容器中的加载顺序 例如有三个类 Order1 Order2 Order3 其中Order1类如下 Component 把类交给spring容器管理 Order 1 使用order属性 设置该类在sp
  • scanf函数返回值的具体应用

    scanf函数返回值的具体应用 include
  • 小程序动态图片加载失败替换本地图片

    希望效果图 前言 写一个新闻列表 一个页面里就有几十条数据 虽然分页查询 但图片有时候还会加载失败 网速 图片大小等原因 下面说说我的思路 我把新闻列表封装成了一个子组件 1 在子组件标签image中放入error事件 传入index 2
  • 华为8年软件测试工程师感悟 功能测试如何体现自己的价值?

    无论在那个行业都有新人 而每个新人在刚入行时都会经历迷茫到精进的过程 大多数的测试人员也是如此 毕竟谁也不是一开始就是行业大佬 接下来 针对题主提出的问题以及描述的所处情况给大家讲一讲测试新人入行初期如何去摆脱迷茫做好自我提升 PS 这里有
  • Linux学习(十):查看文件系统(dumpe2fs)

    b 列出保留为坏道的部分 一般用不到 h 仅列出superblock的数据 不会列出其他的区块内容 1 找出我的根目录磁盘文件名 并查看文件系统的相关信息 ps df 调出目前挂载的设备 ps Filesystem volume name
  • suse linux下修复文件系统,Suse 11 下一次文件系统修复的案例 .

    操作系统 Suse Linux 11 文件系统 ext3 错误现象 X日 接到告警 检查文件系统 dev sda1发现写入报只读 检查IP存储有告警 随即umount img 但卸载后无法正常挂载 fdisk l显示IO错误 重启应用服务器
  • 如何判断文件是否读到文件结尾

    二进制文件 头文件 include define feof stream stream gt flag IOEOF feof 函数用来检测当前文件流上的文件结束标识 判断是否读到了文件结尾 其原型为 int feof FILE stream
  • 1. Ubuntu 20.04 初始化root密码

    1 以普通用户登录系统 创建root用户的密码 在终端输入命令 sudo passwd root 然后输入设置的密码 输入两次 这样就完成了设置root用户密码了 注意Linux系统下密码是没有回显的
  • servlet.Ajax实现上传文件进度条

    这里关于servlet如何上传文件就先不说了 将如何得到已经上传的文件数据的百分比 首先我们先写一个类这个类要实现ProgressListener这个接口 实现里面的update 方法 代码如下 package com test servl