ImageVerifierCode 换一换
格式:DOC , 页数:41 ,大小:269.50KB ,
资源ID:101671      下载积分:5 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-101671.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(AJAX+JSP实现基于WEB的文件上传的进度控制说明书.doc)为本站会员(h****)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

AJAX+JSP实现基于WEB的文件上传的进度控制说明书.doc

1、 1 1. 引言 基于浏览器的文件上传,特别是对于通过 标签来实现上传的情况, 存在着严重的性能问题,因为用户提交了文件之后,在浏览器把文件上传到服务器的过程中,界面看上去似乎是静止的,如果是小文件还好些,如果不幸需要上传的是几兆、几十兆甚至上百兆的文件,我相信那是一种非常痛苦的体验,我们中间的很多人应该都有过此种不堪的经历。(一笑) 现在我就针对这个问题给出一个解决方案,我们将实现一个具有监控能力的 WEB 上传的程序 它不仅把文件上传到服务器,而且 “实时地 “监视文件 上传的实际过程。 解决方案的基本思路是这样的: 在 Form 提交上传文件同时,使用 AJAX 周期性地从 Servle

2、t 轮询上传状态信息 然后,根据此信息更新进度条和相关文字,及时反映文件传输状态 如果用户取消上传操作,则进行相应的现场清理工作:删除已经上传的文件,在 Form 提交页面中显示相关信息 如果上传完毕,显示已经上传的文件内容 (或链接 ) 在介绍源代码之前,我们先来看看程序运行界面: 2. 实现代码 实现代码想当然的有服务器端代码和客户端代码(呵呵),我们先从服务器端开始。 2.1. 服务器端代码 2.1.1. 文件上传状态类( FileUploadStatus) 2 使用 FileUploadStatus这个类记录文件上传状态,并将其作为服务器端与 web客户端之间通信的媒介,通过对这个类对

3、象提供上传状态作为服务器回应发送给 web 客户端, web 客户端使用 JavaScript 获得文件上传状态。源代码如下: /* * 本例程演示了通过 Web 上传文件过程中的进度显示。您可以对本例程进行任何修改和使用。 * 如果需要转载本例程,请您注明作者。 * * 作者: 刘作晨 * EMail: */ package liuzuochen.sample.upload; import java.util.*; public class FileUploadStatus /上传用户地址 private String uploadAddr; /上传总量 private long uploa

4、dTotalSize = 0; /读取上传总量 private long readTotalSize = 0; /当前上传文件号 private int currentUploadFileNum = 0; /成功读取上传文件数 private int successUploadFileCount = 0; /状态 private String status = “; /处理起始时间 private long processStartTime = 0l; /处理终止时间 private long processEndTime = 0l; /处理执行时间 private long processR

5、unningTime = 0l; /上传文件 URL 列表 private List uploadFileUrlList = new ArrayList(); /取消上传 private boolean cancel = false; /上传 base目录 private String baseDir = “; public FileUploadStatus() public String getBaseDir() return baseDir; 3 public void setBaseDir(String baseDir) this.baseDir = baseDir; public bo

6、olean getCancel() return cancel; public void setCancel(boolean cancel) this.cancel = cancel; public List getUploadFileUrlList() return uploadFileUrlList; public void setUploadFileUrlList(List uploadFileUrlList) this.uploadFileUrlList = uploadFileUrlList; public long getProcessRunningTime() return pr

7、ocessRunningTime; public void setProcessRunningTime(long processRunningTime) this.processRunningTime = processRunningTime; public long getProcessEndTime() return processEndTime; public void setProcessEndTime(long processEndTime) this.processEndTime = processEndTime; public long getProcessStartTime()

8、 return processStartTime; public void setProcessStartTime(long processStartTime) this.processStartTime = processStartTime; public long getReadTotalSize() return readTotalSize; public void setReadTotalSize(long readTotalSize) this.readTotalSize = readTotalSize; public int getSuccessUploadFileCount()

9、return successUploadFileCount; public void setSuccessUploadFileCount(int successUploadFileCount) this.successUploadFileCount = successUploadFileCount; 4 public int getCurrentUploadFileNum() return currentUploadFileNum; public void setCurrentUploadFileNum(int currentUploadFileNum) this.currentUploadF

10、ileNum = currentUploadFileNum; public String getStatus() return status; public void setStatus(String status) this.status = status; public long getUploadTotalSize() return uploadTotalSize; public String getUploadAddr() return uploadAddr; public void setUploadTotalSize(long uploadTotalSize) this.uploa

11、dTotalSize = uploadTotalSize; public void setUploadAddr(String uploadAddr) this.uploadAddr = uploadAddr; public String toJSon() StringBuffer strJSon = new StringBuffer(); strJSon.append(“UploadTotalSize:“).append(getUploadTotalSize().append( “,“) .append(“ReadTotalSize:“).append(getReadTotalSize().a

12、ppend(“,“) .append(“CurrentUploadFileNum:“).append(getCurrentUploadFileNum(). append(“,“) .append(“SuccessUploadFileCount:“).append( getSuccessUploadFileCount().append(“,“) .append(“Status:“).append(getStatus().append(“,“) .append(“ProcessStartTime:“).append(getProcessStartTime(). append(“,“) .appen

13、d(“ProcessEndTime:“).append(getProcessEndTime().append( 5 “,“) .append(“ProcessRunningTime:“).append(getProcessRunningTime(). append(“,“) .append(“Cancel:“).append(getCancel().append(“); return strJSon.toString(); 2.1.2. 文件上传状态侦听类( FileUploadListener) 使用 Common-FileUpload 1.2 版本 (20070103)。此版本提供了能够监

14、视文件上传情况的ProcessListener接口,使开发者通过 FileUploadBase 类对象的 setProcessListener方法植入自己的 Listener。 FileUploadListener 类实现了 ProcessListener,在整个文件上传过程中,它对上传进度进行监控,并且根据上传 情况实时的更新上传状态 Bean。源代码如下: /* * 本例程演示了通过 Web 上传文件过程中的进度显示。您可以对本例程进行任何修改和使用。 * 如果需要转载本例程,请您注明作者。 * * 作者: 刘作晨 * EMail: */ package liuzuochen.sample

15、.upload; import mons.fileupload.ProgressListener; import javax.servlet.http.HttpServletRequest; public class FileUploadListener implements ProgressListener private HttpServletRequest request=null; public FileUploadListener(HttpServletRequest request) this.request=request; /* * 更新状态 */ public void up

16、date(long pBytesRead, long pContentLength, int pItems) FileUploadStatus statusBean= BackGroundService.getStatusBean(request); statusBean.setUploadTotalSize(pContentLength); /读取完成 if (pContentLength = -1) statusBean.setStatus(“完成对 “ + pItems +“个文件的读取 :读取了 “ + pBytesRead + “ bytes.“); 6 statusBean.set

17、ReadTotalSize(pBytesRead); statusBean.setSuccessUploadFileCount(pItems); statusBean.setProcessEndTime(System.currentTimeMillis(); statusBean.setProcessRunningTime(statusBean.getProcessEndTime(); /读取中 else statusBean.setStatus(“当前正在处理第 “ + pItems +“个文件 :已经读取了 “ + pBytesRead + “/“ + pContentLength+ “

18、bytes.“); statusBean.setReadTotalSize(pBytesRead); statusBean.setCurrentUploadFileNum(pItems); statusBean.setProcessRunningTime(System.currentTimeMillis(); BackGroundService.saveStatusBean(request,statusBean); 2.1.3. 后台服务类( BackGroundService) BackGroundService 这个 Servlet 类负责接收 Form Post 数据、回应状态轮询请求、

19、处理取消文件上传的请求。 尽管可以把这些功能相互分 离开来,但为了简单明了,还是将它们放到 Servlet 中,只是由不同的方法进行分割。 源代码如下: /* * 本例程演示了通过 Web 上传文件过程中的进度显示。您可以对本例程进行任何修改和使用。 * 如果需要转载本例程,请您注明作者。 * * 作者: 刘作晨 * EMail: */ package liuzuochen.sample.upload; /* * Title: 后台服务 * * Description: 为客户端提供上传及文件传输状态查 询服务 * */ import java.io.File; import java.io.

20、IOException; 7 import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import mons.fileupload.FileItem; import mons.fileupload.FileUploadException; import mons.fileupload.disk.DiskFileItemFactory; impo

21、rt mons.fileupload.servlet.*; public class BackGroundService extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet public static final String UPLOAD_DIR = “/upload“; public static final String DEFAULT_UPLOAD_FAILURE_URL = “./result.jsp“; public BackGroundService() super(); protecte

22、d void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException doPost(request, response); /* * 从文件路径中取出文件名 */ private String takeOutFileName(String filePath) int pos = filePath.lastIndexOf(File.separator); if (pos 0) return filePath.substring(pos + 1); el

23、se return filePath; /* * 从 request 中取出 FileUploadStatus Bean */ public static FileUploadStatus getStatusBean( HttpServletRequest request) BeanControler beanCtrl = BeanControler.getInstance(); return beanCtrl.getUploadStatus(request.getRemoteAddr(); /* * 把 FileUploadStatus Bean 保存到类控制器 BeanControler

24、8 */ public static void saveStatusBean( HttpServletRequest request, FileUploadStatus statusBean) statusBean.setUploadAddr(request.getRemoteAddr(); BeanControler beanCtrl = BeanControler.getInstance(); beanCtrl.setUploadStatus(statusBean); /* * 删除已经上传的文件 */ private void deleteUploadedFile(HttpServlet

25、Request request) FileUploadStatus satusBean = getStatusBean(request); for (int i = 0; i 0) String fileName = takeOutFileName(item.getName(); File uploadedFile = new File(request.getRealPath(UPLOAD_DIR) + File.separator + fileName); item.write(uploadedFile); /更新上传文件列表 FileUploadStatus satusBean = get

26、StatusBean(request); satusBean.getUploadFileUrlList().add(fileName); saveStatusBean(request, satusBean); Thread.sleep(500); catch (FileUploadException e) uploadExceptionHandle(request, “上传文件时发生错误 :“ + e.getMessage(); catch (Exception e) uploadExceptionHandle(request, “保存上传文件时发生错误 :“ + e.getMessage()

27、; if (forwardURL.length() = 0) forwardURL = DEFAULT_UPLOAD_FAILURE_URL; request.getRequestDispatcher(forwardURL).forward(request, response); /* * 回应上传状态查询 */ private void responseStatusQuery(HttpServletRequest request, HttpServletResponse response) throws IOException response.setContentType(“text/xml“); response.setHeader(“Cache-Control“, “no-cache“); FileUploadStatus satusBean = getStatusBean(request); response.getWriter().write(satusBean.toJSon();

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。