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 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";
//轮询命令字
public static final String PROTOCOL_COMMAND_POLL_KEY="uploadStatus";
//取消上传命令字
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");
}
/**
* 设置文件下载的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));
}
/**
* 回应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回应");
UploadSessionImpl uSession=new UploadSessionImpl(UploadSessionManager.getInstance().createSessionId());
uSession.setFUploadStatusBean(FileUploadStatusBeanManager.initFileUploadStatusBean());
FileUploadStatusBeanManager.setFileUploadStatusBeanIntoUploadSession(uSession);
InteractionMessage im=new InteractionMessage();
im.setMsg(uSession.getId());
request.getSession().setAttribute(Constant.SESSION_KEY,uSession.getId());
request.getSession().setAttribute(Constant.FORWARDURL_KEY,Utils.getForwardURLFromHttpRequest(request));
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,
FileUploadStatusBeanManager.getFileUploadStatusBeanFromUploadSession(Utils.getSessionIdFromHttpRequest(request)).getFUploadStatusBean()
);
}
/**
* 处理取消文件上传,注意这并不能终止form的提交过程
* @param request
* @param response
* @throws IOException
*/
private void processCancelFileUpload(HttpServletRequest request,HttpServletResponse response) throws IOException{
UploadSessionImpl uSession=FileUploadStatusBeanManager.getFileUploadStatusBeanFromUploadSession(Utils.getSessionIdFromHttpRequest(request));
uSession.getFUploadStatusBean().setCancel(true);
FileUploadStatusBeanManager.setFileUploadStatusBeanIntoUploadSession(uSession);
responseFileUploadStatusPoll(request,response);
}
/**
* 在上传文件列表中查找与文件id相关的文件名
* @param request
* @param fileId 文件id
* @return 找到返回文件名,否则返回null
*/
private String findFileNameInFileUploadedList(HttpServletRequest request,int fileId){
UploadSessionImpl uSession=FileUploadStatusBeanManager.getFileUploadStatusBeanFromUploadSession(Utils.getSessionIdFromHttpRequest(request));
if (uSession.getFUploadStatusBean().getUploadFileUrlList().size()>fileId){
return (String)uSession.getFUploadStatusBean().getUploadFileUrlList().get(fileId);
}
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.getSession().getServletContext().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);
}
}
/**
* 删除文件
* @param request 其中deletedFile参数值为删除文件名
* @param response
* @throws IOException
* @throws ServletException
* @throws IOException
*/
private void deleteFile(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
logger.debug("发送删除文件回应");
InteractionMessage im=new InteractionMessage();
int fileId=Integer.parseInt(request.getParameter(PROTOCOL_COMMAND_FILEID_KEY));
String fileName=findFileNameInFileUploadedList(request,fileId);
if (fileName!=null){
File deletedFile = new File(request.getSession().getServletContext().getRealPath(Constant.UPLOAD_DIR)+File.separator+fileName);
if (deletedFile.delete()){
UploadSessionImpl uSession=FileUploadStatusBeanManager.getFileUploadStatusBeanFromUploadSession(Utils.getSessionIdFromHttpRequest(request));
uSession.getFUploadStatusBean().getUploadFileUrlList().remove(fileId);
FileUploadStatusBeanManager.setFileUploadStatusBeanIntoUploadSession(uSession);
im.setMsg("删除文件["+fileName+"]成功!");
}
else{
im.setMsg("删除文件["+fileName+"]失败!");
}
}
else{
im.setMsg("删除文件失败:没有找到文件");
}
sendSerializedBean( response,im);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
logger.debug("session id="+request.getSession().getId());
//首先处理join
if (request.getParameter(PROTOCOL_COMMAND_JOIN_KEY)!=null){
logger.debug("收
没有合适的资源?快使用搜索试试~ 我知道了~
ajax上传带进度条案例
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共53个文件
class:16个
java:15个
jar:7个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
需积分: 9 8 下载量 115 浏览量
2009-01-17
14:49:11
上传
评论
收藏 1.58MB RAR 举报
温馨提示
经典上传案例,带进度的哦,看了保证不后悔!
资源推荐
资源详情
资源评论
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![001](https://img-home.csdnimg.cn/images/20210720083646.png)
![002](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/JAR.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/HTML.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/GIF.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/HTML.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![folder](https://csdnimg.cn/release/downloadcmsfe/public/img/folder.005fa2e5.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 53 条
- 1
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/2d2d4ac52f6f4b81b2f0899e4fb14187_lilinhai548.jpg!1)
forestsea
- 粉丝: 114
- 资源: 74
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)