我最近做了一个上传文件的页面,使用的是jsp和serlvet技术,最近要添加一个上传文件的时候要个进度表,请问这个进度表怎么做啊?
解决方案 »
- web开发时 有关分类问题
- 服务器想对 用户请求的中文信息进行加密 不知道用哪种算法
- 大家放心,分一定留下,而且合理的分给大家!
- struts的路径问题
- 分不够在加。麻烦各位大哥,请问如何改动才能使下面代码显示出“JBuilder Generated JSP”
- 用throws抛出异常与用try..catch..捕获异常有什么不同
- 请问如何写个动态的树状目录?急~~,多谢了~~!
- Servlet与数据库连接不能显示中文
- 怎样才能运行JSP程序。。。。。。
- 最近老师布置JSP小项目,遇见各种问题请求大神帮助
- 将Flex ByteArray的图片数据传给java端,保存图片到服务器本地
- struts2 redirectAction 问题
/**
* 上传文件的监听器
* @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;
}
你这个不就是用的apache的Upload组件吗?实现了ProgressListener,在上传的时候加入组件。并且将进度内容保存进session。只是你这个类习惯很不好。1. upload.setProgressListener(new UploadListener(getSession()));
这是啥代码,new两遍?你一定要这么搞还不如
upload.setProgressListener(this);2. e.printStackTrace();??这个生产环境能用吗?3. try和finally的位置也不对4. public int uploadFile(String folder, String []newFileName)方法第一第二个if的用法也不对如果要真的代码review,这段代码不知道要死多少次啊。
你这段代码我知道能用。但,仅仅是能用而已,你如果是个有经验的开发者就知道生产环境是什么意思了。我说了,这段代码做source review能够指摘到死。