如何实现jsp上传文件进度条

vaivxuanzi 2010-01-15 04:27:11
我用的是cos.jar上传组件
亲们都用的什么上传组件
如题 待高手解答 给个思路就行啦
...全文
3031 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
青蛙小王子 2011-10-18
  • 打赏
  • 举报
回复
一点都不好,js还是错的。
cqupt_53 2011-08-09
  • 打赏
  • 举报
回复
it is very crazy about all of you!
wanglei451 2010-11-24
  • 打赏
  • 举报
回复
up up
风过无痕1110 2010-01-15
  • 打赏
  • 举报
回复
ajax文件上传进度条页面:progressBar.jsp

<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
Ajax进度条
</title>
<script type="text/javascript">
//xmlHttpRequest对象
var xmlHttp;
var key;
//进度条颜色
var bar_color='gray';
var span_id='block';
var clear="   "

//创建xmlHttpRequest对象
function createXMLHttpRequest(){
if (window.ActiveXObject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
}

//执行方法
function go(){
createXMLHttpRequest();
checkDiv();
var url = "ProgressBarServlet?task=create";
//隐藏按钮
var button = document.getElementById("go");
button.disabled = true;

xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange = goCallback;
xmlHttp.send(null);
}

//回调方法
function goCallback(){
if (xmlHttp.readyState == 4){
if (xmlHttp.status == 200){
//设置更新时间
setTimeout("pollServer()",2000);
}
}
}

//刷新,重新发送
function pollServer(){
createXMLHttpRequest();
var url = "ProgressBarServlet?task=poll&key=" + key;
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange = pollCallback;
xmlHttp.send(null);
}

//回调方法
function pollCallback(){
if (xmlHttp.readyState == 4){
if (xmlHttp.status == 200){
//完成百分比
var percent_complete = xmlHttp.responseXML.getElementsByTagName("percent")[0].firstChild.data;

var index = processResult(percent_complete);
var (var i = 1; i <= index;i++){
var elem = document.getElementById("block" + i);
elem.innerHTML = clear;

elem.style.backgroundColor = bar_color;
var next_cell = i + 1;
if (next_cell > index && next_cell < = 9){
document.getElementById("block" + next_cell).innerHTML = percent_complete + "%";
}
}

if (index < 9){
setTimeout("pollServer()",2000);
}else{
document.getElementById("complete").innerHTML = "Complete!";
document.getElementById("go").disabled = false;
}
}
}
}

//解析结果
function processResult(){
var ind;
if (percent_complete.length == 1){
ind = 1;
}else if (percent_complete.length == 2){
ind = percent_complete.substring(0,1);
}else(
ind = 9;
}

return ind;
}

//检查提示层信息
function checkDiv(){
var progress_bar = document.getElementById("progressBar");
if (progress_bar.style.visibility == "visible"){
//清除进度条
clearBar();
document.getElementById("complete").innerHTML = "";
}else{
progress_bar.style.visibility = "visible";
}
}

//清除进度条
function clearBar(){
for (var i = 1; i < 10; i++){
var elem = document.getElementById("block" + i);
elem.innerHTML = clear;
elem.style.backgroundColor = "white";
}
}
</script>
</head>
<body bgcolor="#ffffff">
<h1>
Ajax进度条示例
</h1>
运行进度条:
<input type="button" value="运行" id="go" onclick="go()"/>
<p>
</p>
<table align="center">
<tbody>
<tr>
<td><div id="progressBar" style="padding:2px;border:solid black 2px;visibility?hidden">
<span id="block1">   </span>
<span id="block2">   </span>
<span id="block3">   </span>
<span id="block4">   </span>
<span id="block5">   </span>
<span id="block6">   </span>
<span id="block7">   </span>
<span id="block8">   </span>
<span id="block9">   </span>
</div></td>
</tr>
<tr><td align="center" id="complete"></td> </tr>
</tbody>
</table>
</body>
</html>


服务器端:ProgressBarServlet.java

package ajaxvalidation;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class ProgressBarServlet
extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";
//计数器
private int counter = 1;
//Initialize global variables
public void init() throws ServletException {
}

//处理get方法
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//得到任务类型
String task = request.getParameter("task");
//返回的xml字符串
String res = "";

//第一次,创建进度条
if (task.equals("create")){
res = "<key>1</key>";
counter = 1;
}else{
//完成百分比
String percent = "";
switch(counter){
case 1:percent = "10";break;
case 2:percent = "23";break;
case 3:percent = "35";break;
case 4:percent = "51";break;
case 5:percent = "64";break;
case 6:percent = "73";break;
case 7:percent = "89";break;
case 8:percent = "100";break;
}
counter++;

res = "<percent>" + percent + "</percent>";
}

PrintWriter out = response.getWriter();
response.setContentType("text/xml");
response.setHeader("Cache-Control","no-cache");
out.println("<response>");
out.println(res);
out.println("</response>");
out.close();
}

//Clean up resources
public void destroy() {
}
}

villagehead 2010-01-15
  • 打赏
  • 举报
回复
spring已经不用cos作为上传方法了
建议lz换成apache的commons的fileUpload

好像不太切题...

算是帮顶吧

good luck
dafeicao 2010-01-15
  • 打赏
  • 举报
回复
占楼学习
maer56 2010-01-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kksss 的回复:]
之前想过这问题
我的思路是:

前台提交放到IFRAME中,这样SUBMIT提交页面不会刷新
同时AJAX 提交刷新等待服务器返回信息,用于处理显示进度条

后台
1处理接收上传的文件,这时服务器段会创建1个文件
2处理AJAX请求,读去刚才创建文件的大小返回数据给页面
[/Quote]
其实你方法应该对的。我省掉了提交页面。
但是一些计算返回,一般做法就是Ajax读取进度,后台写进去
至于提交刷新,我还没试验过,所以不敢定论。你可以百度一下。或者你看看CSDN的资源上传无刷新
kksss 2010-01-15
  • 打赏
  • 举报
回复
之前想过这问题
我的思路是:

前台提交放到IFRAME中,这样SUBMIT提交页面不会刷新
同时AJAX 提交刷新等待服务器返回信息,用于处理显示进度条

后台
1处理接收上传的文件,这时服务器段会创建1个文件
2处理AJAX请求,读去刚才创建文件的大小返回数据给页面
maer56 2010-01-15
  • 打赏
  • 举报
回复
SmartUpload.jar 以前常用的,有很多参数可配置

common-upload.jar Apache出品,常见使用于Struts开发的网站中
maer56 2010-01-15
  • 打赏
  • 举报
回复
后台计算传的进度,然后放置一个变量中
前台Ajax读取该变量后,更改前台显示

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧