首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
ASP | ASP.NET | JSP | PHP | AJAX | XML | Java script | HTML/CSS | 服务器类
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> WEB开发 >> AJAX学习教程 >> 正文
掌控上传进度的AJAX Upload

       很清楚,我也把FileUploadStatus这个Bean存取于Session中。

        Servlet实现:BackGroundService这个Servlet类负责接收Form Post数据、回应状态轮询请求、处理取消文件上传的请求。尽管可以把这些功能相互分离开来(比如构造一个FileUploadManager类),但出于简单明了、便于阅读之目的,还是将它们放到Servlet中,只是由不同的方法进行分割。
        {BackGroundService中的processFileUpload方法用于处理文件上传请求}:


/**
* 处理文件上传
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/
private void processFileUpload(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
      DiskFileItemFactory factory = new DiskFileItemFactory();
      //设置内存阀值,超过后写入临时文件
      factory.setSizeThreshold(10240000);
      //设置临时文件存储位置
      factory.setRepository(new File(request.getRealPath("/upload/temp")));
      ServletFileUpload upload = new ServletFileUpload(factory);
      //设置单个文件的最大上传size
      upload.setFileSizeMax(10240000);
      //设置整个request的最大size
      upload.setSizeMax(10240000);
      upload.setProgressListener(new FileUploadListener(request.getSession()));
      //保存初始化后的FileUploadStatus Bean
        storeFileUploadStatusBean(request.getSession(),initFileUploadStatusBean(request));
                
        String forwardURL="";
        try {
             List items = upload.parseRequest(request);
             //获得返回url
               for(int i=0;i<items.size();i++){
                   FileItem item=(FileItem)items.get(i);
                   if (item.isFormField()){
                      logger.debug("form Field["+item.getFieldName()+"]="+item.getString());
                      forwardURL=item.getString();
                      break;
                                }
                        }
            //处理文件上传
              for(int i=0;i<items.size();i++){
                 FileItem item=(FileItem)items.get(i);

                   //取消上传
                 if (takeOutFileUploadStatusBean(request.getSession()).getCancel()){
                     deleteUploadedFile(request);
                     break;
                    }
                   //保存文件
                 else if (!item.isFormField() && item.getName().length()>0){
                         String fileName=takeOutFileName(item.getName());
                         logger.debug("处理文件["+fileName+"]:保存路径为"
                         +request.getRealPath(UPLOAD_DIR)+File.separator+fileName);
                         File uploadedFile =
new File(request.getRealPath(UPLOAD_DIR)+File.separator+fileName);
                         item.write(uploadedFile);
                         //更新上传文件列表
                         FileUploadStatus fUploadStatus=takeOutFileUploadStatusBean
(request.getSession());
                         fUploadStatus.getUploadFileUrlList().add(fileName);
                         storeFileUploadStatusBean(request.getSession(),fUploadStatus);
                         Thread.sleep(500);
                          }
                 }
                
       } catch (FileUploadException e) {
              logger.error("上传文件时发生错误:"+e.getMessage());
              e.printStackTrace();
              uploadExceptionHandle(request,"上传文件时发生错误:"+e.getMessage());
        } catch (Exception e) {
               // TODO Auto-generated catch block
               logger.error("保存上传文件时发生错误:"+e.getMessage());
               e.printStackTrace();
               uploadExceptionHandle(request,"保存上传文件时发生错误:"+e.getMessage());
         }
          if (forwardURL.length()==0){
             forwardURL=DEFAULT_UPLOAD_FAILURE_URL;
                }
        request.getRequestDispatcher(forwardURL).forward(request,response);
        }


        {BackGroundService中的responseFileUploadStatusPoll方法用于处理对文件上传状态的轮询请求}:

/**
* 回应上传状态查询
* @param request
* @param response
* @throws IOException
*/
private void responseFileUploadStatusPoll(HttpServletRequest request,HttpServletResponse response)
throws IOException{
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
logger.debug("发送上传状态回应");
response.getWriter().write(XmlUnSerializer.serializeBean(
          request.getSession().getAttribute(UPLOAD_STATUS)));
}


        {BackGroundService中的processCancelFileUpload方法用于处理取消文件上传的请求}:

/**
* 处理取消文件上传
* @param request
* @param response
* @throws IOException
*/
private void processCancelFileUpload(HttpServletRequest request,HttpServletResponse response)
throws IOException{
FileUploadStatus fUploadStatus=(FileUploadStatus)request.getSession().getAttribute(UPLOAD_STATUS);
fUploadStatus.setCancel(true);
request.getSession().setAttribute(UPLOAD_STATUS, fUploadStatus);
responseFileUploadStatusPoll(request,response);
 }


Web客户端代码:

image
Prototype给开发者更多的自由选择



web客户端使用了基于Prototype的AjaxWrapper类和XMLDomForAjax类,前者实现了对Ajax.Request功能的封装,而后者实现了对来自服务器的XML Response的反序列化(反序列化为JavaScript对象)。

 

上一页  [1] [2] [3] [4] 下一页

中国IT教育热线咨询
相关文章
没有相关文章
最新文章
·PHP正则表达式从url中取得域名
·php设计模式介绍之迭代器模式
·简单学习php遇到的主要问题
·asp根据表单自动生成sql语句的函
·雅虎选项卡特效
 文章评论

 精彩友情推荐
·Asp源码 PHP源码
·CGI源码 JSP源码
·建站书籍教程
·服务器软件 .net源码
·建站工具软件
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
ASP.NET ASP PHP JSP
·extjs ComboBox联动下拉菜单示例08-01
·漫谈.Net开发关于命名空间和目录划分07-31
·在Silverlight应用程序中操作Cookie07-28
·带附加条件的NewID()用法(downmoon)07-28
·对自定义路由进行单元测试07-28
·javascript实现yield07-28
·在ASP.NET中使用Google Maps07-28
·Sql Server2005 实现Oracle10g的hash表分区功07-28
·asp.net get set用法07-26
·Asp.net 控件开发—数据回传07-26
·接口vs. 的实体类07-26
·php设计模式介绍之迭代器模式08-02
·简单学习php遇到的主要问题08-02
·asp根据表单自动生成sql语句的函数08-02
·教你优化你的ASP程序03-07
·asp去除HTML标记的三个实用函数03-07
·ASP添加验证码的解决方法03-07
·ASP通用文章分页函数:非记录集分页03-07
·ASP教程基础:十天学会ASP第三天03-07
·ASP教程基础:十天学会ASP第二天03-07
·ASP教程基础:十天学会ASP第一天03-07
·能够生成google xml地图的asp源码03-06
·Linux系统下让PHP提高性能的工具APC05-06
·一个完整、安全的PHP用户登录系统11-14
·Apache+PHP+MySQL建立数据库驱动的动态网站08-24
·用SSH与PHP相连接 确保数据传输的安全性08-23
·PHP5手动最简安装方法08-03
·PHP程序加速探索之服务器负载测试07-11
·完全讲解PHP+MySQL的分页显示示例分析05-30
·用Suhosin加强PHP脚本语言安全性05-26
·初学入门 PHP 和 MySQL05-17
·传奇的诞生 PHP三位创始人简介05-10
·大型系统上PHP令人不爽的九大原因05-10
·ASP.NET和PHP、JSP究竟学哪个?07-30
·JAVA (Jsp)利用Google的Translate开发API07-29
·由Servlet获得FacesContext及ManagedBeans07-24
·用JOTM向Servlet中添加事务07-18
·用servlet生成验证码07-16
·JSP/Servlet伪静态网页实现07-08
·JSP和Servlet的关系浅谈06-15
·妙用异步Servlet扩展AJAX应用程序06-11
·servlet生成验证码图片06-02
·java.servlet.Filter的应用05-30
·Java程序员必看--扩展鼠标右键菜单功能05-13
  培训中心
人才交流中心 技术交流中心
  ITLab技术交流平台: