package com.bjinfotech.practice.ajax;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
/**
* 上传文件命令服务
*/
public class FileUploadCommandService extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
private static final long serialVersionUID = -3946579508549209629L;
//Join命令字
public static final String PROTOCOL_COMMAND_JOIN_KEY="join";
//轮询命令字--返回ActiveFUS
public static final String PROTOCOL_COMMAND_POLL_KEY="uploadStatus";
//列表命令字--返回FUS列表
public static final String PROTOCOL_COMMAND_LISTFILE_KEY="listFile";
//取消上传命令字
public static final String PROTOCOL_COMMAND_CANCELUPLOAD_KEY="cancelUpload";
//下载文件命令字
public static final String PROTOCOL_COMMAND_DOWNFILE_KEY="downFile";
//文件id
public static final String PROTOCOL_COMMAND_FILEID_KEY="fileId";
//删除文件命令字
public static final String PROTOCOL_COMMAND_DELFILE_KEY="deleteFile";
Logger logger=Logger.getLogger(FileUploadCommandService.class);
public FileUploadCommandService() {
super();
}
public void init(){
UploadSessionManager.getInstance().start();
}
public void destroy(){
UploadSessionManager.getInstance().stop();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
/**
* 设置Ajax回应的header
* @param response
*/
private void setAjaxResponseHeader(HttpServletResponse response){
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
}
/**
* 设置Ajax回应的header
* @param response
*/
private void setHTMLResponseHeader(HttpServletResponse response){
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
response.setHeader("Cache-Control", "no-cache");
}
/**
* 设置文件下载的header
* @param response
* @param fileName
* @throws UnsupportedEncodingException
*/
private void setFileDownloadResponseHeader(HttpServletResponse response,String fileName) throws UnsupportedEncodingException{
response.setHeader("Cache-Control", "no-cache");
response.setContentType("application/octet-stream; CHARSET=utf8");
response.setHeader("Content-Disposition","attachment; filename="+
java.net.URLEncoder.encode(fileName,"UTF-8"));
}
/**
* 发送序列化的Bean
* @param response
* @param beanObj
* @throws IOException
*/
private void sendSerializedBean(HttpServletResponse response,Object beanObj) throws IOException{
setAjaxResponseHeader(response);
response.getWriter().write(XmlUnSerializer.serializeBean(beanObj));
}
/**
* 发送序列化的BeanList
* @param response
* @param beanObj
* @throws IOException
*/
private void sendSerializedBeanList(HttpServletResponse response,Object beanObj) throws IOException{
setAjaxResponseHeader(response);
response.getWriter().write(XmlUnSerializer.serializeBeanList(beanObj));
}
/**
* 回应join请求,将生成的或者重用的uploadSession id、forwardURL保存到session中,并将其作为response内容发送
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void responseJoinRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
logger.debug("发送Join回应");
String uSessionId=Utils.getSessionIdFromHttpRequest(request);
UploadSessionImpl uSession=null;
//新建session
if (uSessionId==null
|| uSessionId.length()==0
|| UploadSessionManager.getInstance().hasSession(uSessionId)==false){
uSession=new UploadSessionImpl(UploadSessionManager.getInstance().createSessionId());
UploadSessionManager.getInstance().addOrUpdateUploadSession(uSession);
}
//重用session
else{
uSession=UploadSessionManager.getInstance().getUploadSession(Utils.getSessionIdFromHttpRequest(request));
uSession.setActiveFUSBean(FileUploadStatusBeanManager.initFUSBean());
UploadSessionManager.getInstance().addOrUpdateUploadSession(uSession);
}
InteractionMessage im=new InteractionMessage();
im.setMsg(uSession.getId());
request.getSession().setAttribute(Constant.SESSION_KEY,uSession.getId());
logger.debug("将会话Id["+uSession.getId()+"]保存在session["+request.getSession().getId()+"]中");
sendSerializedBean(response,im);
}
/**
* 回应上传状态查询
* @param request
* @param response
* @throws IOException
*/
private void responseFileUploadStatusPoll(HttpServletRequest request,HttpServletResponse response) throws IOException{
logger.debug("发送上传状态回应");
sendSerializedBean(
response,
UploadSessionManager.getInstance().getActiveFUSBean(Utils.getSessionIdFromHttpRequest(request))
);
}
/**
* 处理取消文件上传,注意这并不能终止form的提交过程
* @param request
* @param response
* @throws IOException
*/
private void processCancelFileUpload(HttpServletRequest request,HttpServletResponse response) throws IOException{
UploadSessionImpl uSession=UploadSessionManager.getInstance().getUploadSession(Utils.getSessionIdFromHttpRequest(request));
uSession.getActiveFUSBean().setCancel(true);
UploadSessionManager.getInstance().addSession(uSession);
responseFileUploadStatusPoll(request,response);
}
/**
* 在上传文件列表中查找与文件id相关的URL
* @param request
* @param fileId 文件id
* @return 找到返回URL,否则返回null
*/
private String findFileNameInFileUploadedList(HttpServletRequest request,int fileId){
UploadSessionImpl uSession=UploadSessionManager.getInstance().getUploadSession(Utils.getSessionIdFromHttpRequest(request));
if (uSession.getFUSBeanList().size()>fileId){
FileUploadStatus fus=(FileUploadStatus)uSession.getFUSBeanList().get(fileId);
return fus.getUploadFileURL();
}
else{
return null;
}
}
/**
* 下载文件
* @param request 其中downFile参数值为下载文件名
* @param response
* @throws IOException
*/
private void downloadFile(HttpServletRequest request,HttpServletResponse response) throws IOException{
int fileId=Integer.parseInt(request.getParameter(PROTOCOL_COMMAND_FILEID_KEY));
String fileName=findFileNameInFileUploadedList(request,fileId);
if (fileName!=null){
setFileDownloadResponseHeader(response,fileName);
File uploadedFile = new File(request.getRealPath(Constant.UPLOAD_DIR)+File.separator+fileName);
DataInputStream is=new DataInputStream(new FileInputStream(uploadedFile));
DataOutputStream os=new DataOutputStream(response.getOutputStream());
byte[] readBytes=new byte[128];
while(is.read(readBytes)!=-1){
os.write(readBytes);
}
os.close();
is.close();
}
else{
InteractionMessage im=new InteractionMessage();
im.setMsg("下载文件失败:没有找到文件");
sendSerializedBean( response,im);
}
}
/**
* 删除文件,删除成功返回新的FUS列表,否则返回消息
* @param request 其中deletedFile参数值为删除文件名
* @param response
* @throws IOException
* @throws ServletException
* @throws IOException
*/
private void deleteFile(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
logger.debug("发送删除文件回应");
int fileId=Integer.parseInt(request.getParameter(PROTOCOL_COMMAND_FILEID_KEY));
String fileName=findFileNameInFileUploadedList(request,fileId);
if (fileName!=null){
File deletedFile = new File(request.getRealPath(Constant.UPLOAD_DIR)+File.separator+fileName);
if (dele
没有合适的资源?快使用搜索试试~ 我知道了~
Ajax完美上传进度条
共59个文件
class:19个
java:18个
jar:8个
需积分: 9 2 下载量 64 浏览量
2008-09-11
15:03:23
上传
评论
收藏 2.08MB ZIP 举报
温馨提示
ajax写的上传进度条,jar包齐全的,用于学习
资源推荐
资源详情
资源评论
收起资源包目录
AjaxFileUpload_u3.zip (59个子文件)
css
fileUpload.css 1KB
WEB-INF
web.xml 1KB
src
test
com
bjinfotech
practice
ajax
TestUtils.java 702B
TestUploadSessionManager.java 3KB
log4j.properties 765B
com
bjinfotech
practice
ajax
InteractionMessage.java 334B
FileUploadStatusList.java 158B
FileUploadListener.java 2KB
Utils.java 7KB
BeanUnSerializer.java 2KB
Constant.java 1KB
FileUploadCommandService.java 10KB
PlainURLEncoder.java 2KB
XmlUnSerializer.java 8KB
UploadSession.java 502B
UploadSessionImpl.java 3KB
FileUploadStatus.java 2KB
MyServletFileUpload.java 4KB
UploadSessionManager.java 5KB
UploadProcessService.java 8KB
FileUploadStatusBeanManager.java 1KB
clamscan.properties 142B
lib
log4j-1.2.9.jar 344KB
commons-fileupload-20070103.jar 49KB
jakarta-regexp-1.4.jar 28KB
commons-logging-1.0.4.jar 37KB
bjvip_quickaction.jar 813KB
commons-collections-3.1.jar 546KB
commons-io-1.2.jar 64KB
dom4j-1.5.1.jar 370KB
classes
test
com
bjinfotech
practice
ajax
TestUploadSessionManager.class 3KB
TestUtils.class 2KB
log4j.properties 765B
com
bjinfotech
practice
ajax
UploadSessionManager$AgingTimerTask.class 2KB
FileUploadStatusList.class 350B
FileUploadStatus.class 2KB
UploadProcessService.class 8KB
FileUploadListener.class 3KB
BeanUnSerializer.class 4KB
XmlUnSerializer.class 7KB
MyServletFileUpload.class 6KB
UploadSessionImpl.class 4KB
Constant.class 840B
PlainURLEncoder.class 2KB
InteractionMessage.class 672B
UploadSessionManager.class 5KB
FileUploadCommandService.class 9KB
FileUploadStatusBeanManager.class 2KB
Utils.class 5KB
UploadSession.class 501B
clamscan.properties 142B
META-INF
MANIFEST.MF 39B
fileUpload_single.html 2KB
upload
temp
img
clamav-logo1.png 3KB
loading.gif 3KB
prototype.png 4KB
javascript
upload.js 7KB
newAjaxWrapper.js 12KB
prototype.js 46KB
共 59 条
- 1
资源评论
yewenyu
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功