文件生成的时候使用进度条 该怎么做啊~~求实例 如题~要后台生成一个文件,文件比较大 所以需要显示进度条 该怎么实现 求代码~麻烦注释详细点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好吧 也许我没说清楚 ~jsp中使用的 import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UpLoad extends HttpServlet { private static final long serialVersionUID = 1L; long upFileSize; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GBK"); String action = request.getParameter("action"); if ("uploadFile".equals(action)) { this.uploadFile(request, response); // 上传文件 } } @SuppressWarnings("unchecked") public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=GBK"); request.setCharacterEncoding("GBK"); HttpSession session = request.getSession(); session.setAttribute("progressBar", 0); // 定义指定上传进度的Session变量 String error = ""; int maxSize = 50 * 1024 * 1024; // 单个上传文件大小的上限 DiskFileItemFactory factory = new DiskFileItemFactory(); // 基于磁盘文件项目创建一个工厂对象 ServletFileUpload upload = new ServletFileUpload(factory); // 创建一个新的文件上传对象 try { List items = upload.parseRequest(request);// 解析上传请求 Iterator itr = items.iterator();// 枚举方法 while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); // 获取FileItem对象 if (!item.isFormField()) {// 判断是否为文件域 if (item.getName() != null && !item.getName().equals("")) {// 判断是否选择了文件 upFileSize = item.getSize(); // 上传文件的大小 String fileName = item.getName(); // 获取文件名 // System.out.println("上传文件的大小:" + item.getSize()); if (upFileSize > maxSize) { error = "您上传的文件太大,请选择不超过50M的文件"; break; } // 此时文件暂存在服务器的内存中 File tempFile = new File(fileName);// 构造临时对象 String uploadPath = this.getServletContext() .getRealPath("/upload"); File file = new File(uploadPath, tempFile.getName()); // 获取根目录对应的真实物理路径 InputStream is = item.getInputStream(); int buffer = 1024; // 定义缓冲区的大小 int length = 0; byte[] b = new byte[buffer]; double percent = 0; FileOutputStream fos = new FileOutputStream(file); while ((length = is.read(b)) != -1) { percent += length / (double) upFileSize * 100D; // 计算上传文件的百分比 fos.write(b, 0, length); // 向文件输出流写读取的数据 session.setAttribute("progressBar", Math .round(percent)); // 将上传百分比保存到Session中 } fos.close(); Thread.sleep(1000); // 线程休眠1秒 } else { error = "没有选择上传文件!"; } } } } catch (Exception e) { e.printStackTrace(); error = "上传文件出现错误:" + e.getMessage(); } if (!"".equals(error)) { request.setAttribute("error", error); request.getRequestDispatcher("error.jsp") .forward(request, response); } else { request.setAttribute("result", "文件上传成功!"); request.setAttribute("upFileSize", upFileSize); request.getRequestDispatcher("upFile_deal.jsp").forward(request, response); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; }} 怎么那么死脑筋 int buffer = 1024; // 定义缓冲区的大小 int length = 0; byte[] b = new byte[buffer]; double percent = 0; FileOutputStream fos = new FileOutputStream(file); while ((length = is.read(b)) != -1) { percent += length / (double) upFileSize * 100D; // 计算上传文件的百分比 fos.write(b, 0, length); // 向文件输出流写读取的数据 session.setAttribute("progressBar", Math .round(percent)); // 将上传百分比保存到Session中 } fos.close(); Thread.sleep(1000); // 线程休眠1秒窃取这一段就行了 呵呵楼上给他写了后台代码,jsp上他不知道怎么展示出来。function SetProgress(progress) { $('#loading').css("width",progress+ "%"); //控制#loading div宽度 $('#loading').html(progress+ "%"); //显示百分比} function doProgress(){ if (i > 100) { $('#loading').hide(); return; } if (i <= 100) { setTimeout("doProgress()", 100); SetProgress(i); i++; } } 对你我表示很无语。。下面是一个完整jsp实现,你建个工程找个jsp粘进去开浏览器就看见了,记得引入jquery的js函数里的数据你自己想办法后台送回来拿到就行了,页面怎么跟你的项目结合就自己看着弄吧。<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><script src="/jquery-1.6.min.js" type="text/javascript"></script><script type="text/javascript">var i = 0;function SetProgress(progress) { $('#loading').css("width",progress*10+ "%"); //控制#loading div宽度 $('#loading').html(progress*10+ "%"); //显示百分比} function doProgress() { if (i <= 10) { setTimeout("doProgress()", 1000); SetProgress(i); i++; } } </script></head><body onload="doProgress();"><div style="height:50px; background-color:red;" id="loading" ></div></body></html> div下面加一行:<h1 align="center" id="h1"></h1>js里面显示百分比那一行换成这个:$('#h1').html(progress*10+ "%");让你的数值跟着进度条一起动,其他自己参考着弄吧。 dom4j xml操作 问题跟添加有关 tomecat 关于tomcat中 导入css的问题 这样写对吗??????? jsp中取复选框值的问题,急急急急急!!!!(在线等) 自己做的管理系统登陆不稳定是什么原因,谢谢 [struts]表中无数据如何在页面中显示相应的信息? 修改表单中的radio的值? (jsp)公告的内容存入数据库,取出来就不是原来的格式了。怎么办? jsp提交参数的时候,如果参数值里面有?和=怎么办 谁可以发个oracle jar包给我 谢谢 ssh中dao层Hibernate 4求高手
好吧 也许我没说清楚 ~jsp中使用的
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UpLoad extends HttpServlet { private static final long serialVersionUID = 1L;
long upFileSize; protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
String action = request.getParameter("action");
if ("uploadFile".equals(action)) {
this.uploadFile(request, response); // 上传文件
}
} @SuppressWarnings("unchecked")
public void uploadFile(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK"); HttpSession session = request.getSession();
session.setAttribute("progressBar", 0); // 定义指定上传进度的Session变量
String error = "";
int maxSize = 50 * 1024 * 1024; // 单个上传文件大小的上限
DiskFileItemFactory factory = new DiskFileItemFactory(); // 基于磁盘文件项目创建一个工厂对象
ServletFileUpload upload = new ServletFileUpload(factory); // 创建一个新的文件上传对象
try {
List items = upload.parseRequest(request);// 解析上传请求
Iterator itr = items.iterator();// 枚举方法
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next(); // 获取FileItem对象
if (!item.isFormField()) {// 判断是否为文件域
if (item.getName() != null && !item.getName().equals("")) {// 判断是否选择了文件
upFileSize = item.getSize(); // 上传文件的大小
String fileName = item.getName(); // 获取文件名
// System.out.println("上传文件的大小:" + item.getSize());
if (upFileSize > maxSize) {
error = "您上传的文件太大,请选择不超过50M的文件";
break;
}
// 此时文件暂存在服务器的内存中
File tempFile = new File(fileName);// 构造临时对象
String uploadPath = this.getServletContext()
.getRealPath("/upload");
File file = new File(uploadPath, tempFile.getName()); // 获取根目录对应的真实物理路径
InputStream is = item.getInputStream();
int buffer = 1024; // 定义缓冲区的大小
int length = 0;
byte[] b = new byte[buffer];
double percent = 0;
FileOutputStream fos = new FileOutputStream(file);
while ((length = is.read(b)) != -1) {
percent += length / (double) upFileSize * 100D; // 计算上传文件的百分比
fos.write(b, 0, length); // 向文件输出流写读取的数据
session.setAttribute("progressBar", Math
.round(percent)); // 将上传百分比保存到Session中
}
fos.close();
Thread.sleep(1000); // 线程休眠1秒
} else {
error = "没有选择上传文件!";
}
}
}
} catch (Exception e) {
e.printStackTrace();
error = "上传文件出现错误:" + e.getMessage();
}
if (!"".equals(error)) {
request.setAttribute("error", error);
request.getRequestDispatcher("error.jsp")
.forward(request, response);
} else {
request.setAttribute("result", "文件上传成功!");
request.setAttribute("upFileSize", upFileSize);
request.getRequestDispatcher("upFile_deal.jsp").forward(request,
response);
}
} @Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
} @Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
} @Override
public String getServletInfo() {
return "Short description";
}
}
怎么那么死脑筋
int buffer = 1024; // 定义缓冲区的大小
int length = 0;
byte[] b = new byte[buffer];
double percent = 0;
FileOutputStream fos = new FileOutputStream(file);
while ((length = is.read(b)) != -1) {
percent += length / (double) upFileSize * 100D; // 计算上传文件的百分比
fos.write(b, 0, length); // 向文件输出流写读取的数据
session.setAttribute("progressBar", Math
.round(percent)); // 将上传百分比保存到Session中
}
fos.close();
Thread.sleep(1000); // 线程休眠1秒窃取这一段就行了
楼上给他写了后台代码,jsp上他不知道怎么展示出来。
function SetProgress(progress) {
$('#loading').css("width",progress+ "%"); //控制#loading div宽度
$('#loading').html(progress+ "%"); //显示百分比
}
function doProgress()
{
if (i > 100) { $('#loading').hide();
return;
}
if (i <= 100) {
setTimeout("doProgress()", 100);
SetProgress(i);
i++;
}
}
下面是一个完整jsp实现,你建个工程找个jsp粘进去开浏览器就看见了,记得引入jquery的js
函数里的数据你自己想办法后台送回来拿到就行了,页面怎么跟你的项目结合就自己看着弄吧。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script src="/jquery-1.6.min.js" type="text/javascript"></script>
<script type="text/javascript">
var i = 0;
function SetProgress(progress) {
$('#loading').css("width",progress*10+ "%"); //控制#loading div宽度
$('#loading').html(progress*10+ "%"); //显示百分比
}
function doProgress()
{
if (i <= 10) {
setTimeout("doProgress()", 1000);
SetProgress(i);
i++;
}
}
</script>
</head>
<body onload="doProgress();">
<div style="height:50px; background-color:red;" id="loading" >
</div>
</body>
</html>
js里面显示百分比那一行换成这个:$('#h1').html(progress*10+ "%");
让你的数值跟着进度条一起动,其他自己参考着弄吧。