其整个功能时序图如图所示。
简单的说,要实现在客户端显示进度条,需要做的是:当客户端提交上传文件请求后,服务器在上传文件的过程中,将上传进度情况保存到Session中,客户端周期性的发送请求来获取保存在Session中值,以获取上传文件的进度信息。
1.新建web工程AjaxUpload。
2.将commons-fileupload-1.2.1-bin.zip包中的commons-fileupload-1.2.1.jar文件和commons-io-1.4-bin.zip包中的commons-io-1.4.jar文件拷贝到web工程下的WEB-INF\lib目录下。
3.由于本实例涉及到多个类,处理此类问题最好是给相应的类打包进行管理。在web工程src目录下新建一个包com.ncu.upload。
4.服务器端实现。
首先要创建一个用来保存文件上传状态的类FileUploadStatus。其源码如下:
- packagecom.ncu.upload;
- importjava.util.*;
- publicclassFileUploadStatus{
- //上传总量
- privatelonguploadTotalSize=0;
- //读取上传总量
- privatelongreadTotalSize=0;
- //当前上传文件号
- privateintcurrentUploadFileNum=0;
- //成功读取上传文件数
- privateintsuccessUploadFileCount=0;
- //状态
- privateStringstatus="";
- //处理起始时间
- privatelongprocessStartTime=0l;
- //处理终止时间
- privatelongprocessEndTime=0l;
- //处理执行时间
- privatelongprocessRunningTime=0l;
- //上传文件URL列表
- privateListuploadFileUrlList=newArrayList();
- //取消上传
- privatebooleancancel=false;
- //上传base目录
- privateStringbaseDir="";
- publicStringgetBaseDir(){
- returnbaseDir;
- }
- publicvoidsetBaseDir(StringbaseDir){
- this.baseDir=baseDir;
- }
- publicbooleangetCancel(){
- returncancel;
- }
- publicvoidsetCancel(booleancancel){
- this.cancel=cancel;
- }
- publicListgetUploadFileUrlList(){
- returnuploadFileUrlList;
- }
- publicvoidsetUploadFileUrlList(ListuploadFileUrlList){
- this.uploadFileUrlList=uploadFileUrlList;
- }
- publiclonggetProcessRunningTime(){
- returnprocessRunningTime;
- }
- publicvoidsetProcessRunningTime(longprocessRunningTime){
- this.processRunningTime=processRunningTime;
- }
- publiclonggetProcessEndTime(){
- returnprocessEndTime;
- }
- publicvoidsetProcessEndTime(longprocessEndTime){
- this.processEndTime=processEndTime;
- }
- publiclonggetProcessStartTime(){
- returnprocessStartTime;
- }
- publicvoidsetProcessStartTime(longprocessStartTime){
- this.processStartTime=processStartTime;
- }
- publiclonggetReadTotalSize(){
- returnreadTotalSize;
- }
- publicvoidsetReadTotalSize(longreadTotalSize){
- this.readTotalSize=readTotalSize;
- }
- publicintgetSuccessUploadFileCount(){
- returnsuccessUploadFileCount;
- }
- publicvoidsetSuccessUploadFileCount(intsuccessUploadFileCount){
- this.successUploadFileCount=successUploadFileCount;
- }
- publicintgetCurrentUploadFileNum(){
- returncurrentUploadFileNum;
- }
- publicvoidsetCurrentUploadFileNum(intcurrentUploadFileNum){
- this.currentUploadFileNum=currentUploadFileNum;
- }
- publicStringgetStatus(){
- returnstatus;
- }
- publicvoidsetStatus(Stringstatus){
- this.status=status;
- }
- publiclonggetUploadTotalSize(){
- returnuploadTotalSize;
- }
- publicvoidsetUploadTotalSize(longuploadTotalSize){
- this.uploadTotalSize=uploadTotalSize;
- }
- }