首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

各位请问

2013-01-11 
各位大虾请教啊我最近做了一个上传文件的页面,使用的是jsp和serlvet技术,最近要添加一个上传文件的时候要

各位大虾请教啊
我最近做了一个上传文件的页面,使用的是jsp和serlvet技术,最近要添加一个上传文件的时候要个进度表,请问这个进度表怎么做啊?
[解决办法]
楼下一定会说用jquery进度条,但是用过后的确不错
[解决办法]
用ajax轮询获取上传数据情况信息
[解决办法]
服务器端用的apache的那个上传lib吗?那个里面有一个事件,可以在每次读byte的时候触发。用session将percent记录下来。然后客户端用ajax每次去读session里的那个percent。至于客户端用什么进度条随便啦。
[解决办法]
你想自己写,给你一段代码:

/**
 * 上传文件的监听器
 * @author xjl
 * @version 2.0
 */
public class UploadListener implements ProgressListener {

private UploadInfo info;

/**
 * 构造方法
 * @param session
 */
public UploadListener(HttpSession session) {
info = (UploadInfo) session.getAttribute(FrameConfig.uploadInfo);
if (null == info) {
info = new UploadInfo();
}
session.setAttribute(FrameConfig.uploadInfo, info);
}

/**
 * 上传文件即时监听
 * @param readSize 已上传字节数
 * @param fileSize 文件总大小
 * @param num 目前正在读取第几个文件
 */
public void update(long readSize, long fileSize, int num) {
if (num > 0) {
Double percent = ( ((Long) readSize).doubleValue() / ((Long) fileSize).doubleValue()) * 100d;
info.setFileSize(fileSize);
info.setNum(num);
info.setPercent(percent.intValue());
info.setReadSize(readSize);
}
}

}

/**
 * 上传文件, 返回上传成功的文件个数, 可以读取文件上传的实时进度
 * @param folder 文件存放的目录,物理路径
 * @param newFileName 保存为新文件的名称(支持多个文件同时上传)
 * @return int 
 */
@SuppressWarnings("unchecked")
public int uploadFile(String folder, String []newFileName) {
int num = -1;
try {
File folderFile = new File(folder);
FileUtil.getBean().createFolder(folder);
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(FrameConfig.maxUploadFileSize);
upload.setProgressListener(new UploadListener(getSession()));
getRequest().setCharacterEncoding("UTF-8");
Iterator iterator = upload.parseRequest(getRequest()).iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();//源文件
if (!item.isFormField() && !"".equals(item.getName())) {
num++;
if (num < newFileName.length) {
OutputStream output = new FileOutputStream(new File(folderFile, newFileName[num]));
InputStream input = item.getInputStream();
try {
byte[] buffer = new byte[1024];
int i = 0;
while ((i = input.read(buffer)) != -1) {
output.write(buffer, 0, i);//保存文件
}
} catch (Exception e) {
e.printStackTrace();
} finally {


input.close();
output.close();
}
} else {
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return num + 1;
}

/**
 * 文件上传时读取即时的上传进度(返回json格式字符串)
 * @return String
 */
public String readUploadProgress() {
String result = "";
UploadInfo info = (UploadInfo) getSession().getAttribute(FrameConfig.uploadInfo);
if (null != info) {
return "{readSize:"" + info.getReadSize() + 
"",fileSize:"" + info.getFileSize() + 
"",num:"" + info.getNum() + 
"",percent:"" + info.getPercent() + ""}";
}
return result;
}


[解决办法]
虽然这些代码可以实现文件上传的进度条,但过于啰嗦,
我平常都用插件上传,不需要这么啰嗦的代码,已经有了进度条,效果图:
各位请问

[解决办法]
很多插件的,不要造轮子了

热点排行
Bad Request.