日期:2014-05-17  浏览次数:20706 次

struts2 实现进度条功能
我现在做一个项目,要把文件上传到服务器,然后在把文件转换成pdf,但是过程有些慢,想弄个进度条,
现在问题是 网上说的只有文件上传的进度条,没有文件转换的进度条,
我现在只要求文件转换可以出进度条就可以,我用的是jodconverter+openOffice做的转PDF但是不知道用这个怎么转,说白了就是在ACTION中执行时间比较长的操作,可是要怎么样才能出现进度条呢,请大家给个具体点的思路

------解决方案--------------------
自己写段JS,自己计算转换量。
------解决方案--------------------
楼上说的对,要自己写js,异步调用后台,返回实时转换量来更新前台页面的进度条
------解决方案--------------------
File file_in = new File(filename);
long result=file.size();
double tempSize = 0.0,fileSize =0.0;
fileSize=result;
BufferedOutputStream output = new BufferedOutputStream(dataSocket.getOutputStream());
byte[] buffer = new byte[4096];
int bytesRead = 0;
int progress = 0; //当前进度值 0-100
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
tempSize += bytesRead;
progress = (int)((tempSize / fileSize) * 100);
System.out.println("当前进度为:" + progress + "%");
}
然后通过ajax来和界面进行交互。
------解决方案--------------------
可以在写个JS 控制多长时间 调用Action中的方法 jsp中进度条就可以用Div来显示控制 每次刷新进度条区域就可以了
------解决方案--------------------
看你是如何实现PDF转换了,如果用的是别人的包,那没办法,除非别人包提供进度支持。如果你自己写代码实现,可以先读取转换前文件大小作为总量 sum ,用带 buffer的流读取文件,读一点,转换一点,用个计数器计数buffer 刷新次数。刷新次数乘以buffer 的大小,就是你已经转换的,再去除以 sum 就可以得到 比率。要点,就是 sum 要取转换前文件大小,因为不同格式文件转成pdf ,转换前后是变大还是变小不一样的。