`
zprill
  • 浏览: 36395 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ajax Upload--文件上传进度条

阅读更多
http://wiki.springside.org.cn/display/springside/AjaxUpload

Ajax Upload--文件上传进度条

1.概述

Ajax Upload 实现了文件上传进度条的功能。

首先简要说明一下AjaxUpload的原理:我们知道上传文件的时候实际上是客户端和服务器端创建了一个文件流,我们的目标就是实时得到这个文件到底上传了多少。我们只要在服务器端创建一个监听器监听这个文件流,很容易就能得到上传的大小,关键问题是怎么把当前一上传的大小返回给客户端显示出来。有了AJAX,这个还是问题么?用DWR 远程调用服务端的FileUploadMontor取一下就OK了。

SpringSide在BookStore示例的图书管理中演示了该技术。

2. 使用

2.1 所需文件

1.SpringSide Core 的Ajax Upload部分java文件,由网上源码摘抄并修改而来。

2.BookStore 中的的webapp/widgets/ajaxupload目录的js与css 文件

3. DWR配置文件,负责与上传状态类的通信。

2.2 与Struts框架的结合

网上的源码已经做好了实现。我们要做的就是在struts上传的组件中加一个监听器。Struts是使用commons-upload来上传的,整合起来比较方便。只需要自己实现一个MultipartRequestHandler,加入监听器的功能,替换掉默认的版本就可以了。

修改Struts使用的MultipartRequestHandler的方法是在配置文件里加入controller:

<controller>
  <set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
  <set-property property="multipartClass"
       value="org.springside.core.components.ajaxupload.AjaxMultipartRequestHandler"/>
 </controller>

大功告成!!

2.3 DWR的配置

主要配置DWR 输出UploadMonitor的内容,见bookstore中的WEB-INF/dwr.xml 和web.xml 中引入dwr的部分,参考DWR 中的描述。

2.4 Struts Action 无需修改

action跟正常的文件上传是一样的,就是从frombean里得到文件,然后IO处理就是了,这里就不重复了。

2.5 页面的修改

页面需要加上css和ajaxupload.js脚本, dwr的js脚本,还有特定的div来显示进度条的效果。

如果直接使用我们的封装的css和js,请在jsp页面直接引用
<%@ include file="/widgets/ajaxupload/ajaxupload.jsp" %>

1.其中css文件指定了进度条的大小和颜色

#progressBar {
padding-top: 5px;
}
#progressBarBox {
width: 350px;
height: 20px;
border: 1px inset;
background: #eee;
}
#progressBarBoxContent {
width: 0;
height: 20px;
border-right: 1px solid #444;
background: #9ACB34;
text-align: right;
}

2.js文件的内容:

var fileInput;
var submitButton;
var progressBarBoxContent;
var progressBar;

function refreshProgress() {
  UploadMonitor.getUploadInfo(updateProgress);
}
function updateProgress(uploadInfo) {
  if (uploadInfo.inProgress) {
    progressBar.style.display = 'block';
    fileInput.style.display = 'none';
    fileInput.disabled = true;
    submitButton.disabled = true;

    var fileIndex = uploadInfo.fileIndex;
    var progressPercent = Math.ceil((uploadInfo.bytesRead / uploadInfo.totalSize) * 100);

    progressBarBoxContent.innerHTML = progressPercent + '%';
    progressBarBoxContent.style.width = parseInt(progressPercent * 3.5) + 'px';

    window.setTimeout('refreshProgress()', 100);
  } else {
    submitButton.disabled = false;
    fileInput.disabled = false;
    progressBar.style.display = 'none';
  }
  return true;
}

function startProgress(fileInputName, submitButtonName) {
  fileInput = document.getElementById(fileInputName);
  submitButton = document.getElementById(submitButtonName);
  progressBar = document.getElementById('progressBar');
  progressBarBoxContent = document.getElementById('progressBarBoxContent');
  if (fileInput \!= null && submitButton \!= null && progressBar \!= null && progressBarBoxContent \!= null) {
    progressBarBoxContent.innerHTML = '0%';
    window.setTimeout("refreshProgress()", 150);
    return true;
  } else {
    alert('Ajax Upload ERROR\!');
    return false;
  }
}

3. 加入进度条的div,见bookstore示例中的bookform.jsp

4. form的onsubmit事件

在form的onsubmit事件里,要加上startProgress才能显示上传进度条。

 onsubmit="return validateBookForm(this) && startProgress('imageFile','save')"

分享到:
评论

相关推荐

    完美解决上传进度条和upload控件不能修改样式的问题

    "完美解决上传进度条和upload控件不能修改样式的问题"这一标题所涉及的知识点,主要聚焦于文件上传功能的优化,特别是如何提升用户体验和自定义界面风格。 上传控件是网页中常见的一种元素,用于让用户提交本地文件...

    Layui实现文件上传进度条

    要实现文件上传进度条,我们需要使用到Layui的AjaxUpload组件,该组件可以用来上传文件并显示上传进度。我们可以使用`layui.upload`方法来上传文件,并使用`on`方法来监听上传进度。 例如: ```javascript layui....

    struts1.2下实现文件上传进度条

    4. **Ajax Upload**:1.0版本,用于处理文件上传和进度显示 #### 三、实现步骤 ##### 1. 客户端部分 - **理解项目结构**:首先需要了解`ajax-upload-1.0.war`包的结构,这是实现进度条的基础。 - **资源复制**: ...

    ajax-file-upload-plugin-0.4.0

    ajax file upload 0.4.0,基于Java的文件上传组件,支持上传文件进度条显示

    ajax上传进度条,form上传文件进度条

    在现代Web应用中,用户界面的交互性和用户体验是至关重要的,而“ajax上传进度条”和“form上传文件进度条”就是提升这方面体验的重要技术。本文将深入探讨这两种技术的原理、实现方式以及如何在实际项目中应用。 ...

    Ajax实现文件上传进度条

    Ajax技术的出现为解决这一问题提供了可能,它允许我们在不刷新整个页面的情况下进行异步通信,从而实现文件上传进度条的功能。下面将详细讲解如何利用Ajax实现文件上传进度条。 首先,我们需要理解Ajax的基本原理。...

    js实现文件上传进度条

    在JavaScript中实现文件上传进度条是一项重要的用户交互优化工作,它可以显著提升用户体验,尤其是在处理大文件上传时。本文将深入探讨如何实现这一功能,主要涉及以下几个关键知识点: 1. **进度条的实现**:...

    Common-FileUpload带进度条文件上传

    4. AJAX与XMLHttpRequest:在实现带进度条的文件上传时,通常会用到AJAX和XMLHttpRequest对象。它们允许前端与服务器进行异步通信,使得在不刷新页面的情况下,可以实时更新文件上传状态,从而展示进度条。 5. 大...

    ajaxupload.js

    AjaxUpload是一种在Web应用中实现异步文件上传的技术,它基于JavaScript的Ajax(Asynchronous JavaScript and XML)技术,允许用户在不刷新整个页面的情况下上传文件,提高了用户体验。`ajaxupload.js`是实现这一...

    jquery-java-ajax-uploadify上传文件

    在IT行业中,前端开发经常会遇到文件上传的需求,而"jquery-java-ajax-uploadify上传文件"是一个经典的方法,结合了JavaScript库jQuery、Ajax技术以及Uploadify插件来实现这一功能。在这个过程中,我们将深入探讨...

    Upload-master.zip

    提供进度条功能可以提升用户体验,这需要利用到HTML5的File API和Ajax异步上传,或者第三方库如jQuery Form插件和Dropzone.js。 综上所述,"Upload-master.zip"中的类或库可能包含实现上述所有功能的代码,方便...

    ajax带进度条的上传功能

    在现代Web应用中,用户对...以上就是实现Ajax带进度条上传功能的基本步骤。在实际开发中,你可能还需要结合具体业务需求,进行错误处理、提示信息展示等定制化工作。记住,良好的用户体验往往来源于这些细节的优化。

    Python - Flask 使用Ajax 实现多文件上传

    以下将详细介绍如何在Flask中利用Ajax实现多文件上传。 **一、Flask基础知识** Flask是一个轻量级的Web服务程序,它使用Python编写,基于Werkzeug WSGI工具箱和Jinja2模板引擎。Flask提供了一个简单易用的接口,...

    Ajax upload 的 JSP实现源码 (带上传进度条)

    Ajax-upload 的JSP实现源码,运行于JSP环境,含相关的JAVA源代码,学习Java比较不错,同时本程序实现带上传进度条上传图片、文件等,上传程序是大家经常用到的模块,你可将本模块摘录出来用到你的JSP项目中。

    ajax上传文件进度条及springMVC上传

    总结,通过Ajax与SpringMVC的结合,我们可以实现文件上传过程中前端的进度条显示。关键在于利用Ajax的异步特性,监听文件上传的进度,并通过自定义后端组件将这些信息传递回前端。这样的设计不仅提升了用户体验,也...

    jQuery-File-Upload-master

    2. **异步上传**:通过AJAX实现文件的后台上传,不会阻塞用户操作。 3. **进度条显示**:提供实时的上传进度反馈,提升用户感知度。 4. **预览功能**:对于图片等类型文件,可以在上传前进行预览。 5. **取消和重试...

    c# 上传文件进度条

    一种常用的jQuery插件是`jQuery File Upload`,它支持多文件选择、文件预览、进度条显示、取消上传等功能。要使用该插件,首先在HTML中引入jQuery、jQuery UI和jQuery File Upload的相关脚本和样式文件。 2. **HTML...

    java实现大文件上传并有进度条及其代码解析

    为了提供更好的用户体验,通常需要添加进度条功能,让用户了解文件上传的状态。本文将详细介绍如何使用Java实现大文件的上传并展示进度条,同时解析相关的代码实现。 1. **大文件分块上传** 大文件上传的关键在于...

    Java中使用Ajax、Jquery带进度条文件上传.

    在文件上传中,我们将利用jQuery的Ajax方法来实现异步上传,同时配合一个进度条插件来展示上传进度。 1. **前端实现**: - 使用HTML创建一个表单,包含文件输入元素和一个进度条元素。例如: ```html ...

    jquery 插件ajaxupload 的简单应用

    - **多文件上传**:虽然AjaxUpload默认支持单文件上传,但可以通过修改插件代码或使用其他库(如Dropzone.js)实现多文件上传。 - **文件类型限制**:在beforeSubmit函数中,可以通过检查文件扩展名来限制上传的文件...

Global site tag (gtag.js) - Google Analytics