SWFUpload是一个基于flash与javascript的客户端文件上传组件。

1、handlers.js文件

完成文件入列队(fileQueued) →
完成选择文件(fileDialogComplete) → 开始上传文件(uploadStart) → 上传处理(uploadProgress) → 上传成功(uploadSuccess) → 上传完成(uploadComplete)  →
列队完成(queueComplete)

如上所示,单选文件顺序执行以上回调函数,需要注意的是选择多个文件,fileQueued、queueComplete只会执行一次,而fileDialogComplet...→ uploadComplete每个文件都执行一次。

参数file是一个javascript对象,其结构如下:
{
   id : string, //SWFUpload为队列中的文件生成的ID
   index : number, //文件的索引值,使用getFile(index)可以获取该文件
   name : string, //原文件名,不包含原文件目录
   size : number, //文件的尺寸,单位:byte
   type : string, //文件类型
   creationdate : Date, //文件的创建时间
   modificationdate : Date, //文件的最后修改时间
   filestatus : number, //文件在上传队列中的状态,可以使用SWFUpload.FILE_STATUS比较值
}

2、批量上传
上传文件只需要调用SWFUpload的startUpload函数即可,如果队列中有多个文件,调用startUpload()后只会上传第一个未上传的文件,要批量上传只要设置上传文件成功后,再次调用开始上传方法。

代码 复制 - 运行

function uploadComplete(file) { 
    if (this.getStats().files_queued === 0) { 
        document.getElementById(this.customSettings.cancelButtonId).disabled = true; 
    } else {     
        this.startUpload(); 
    } 
}

3、文件上传限制
刊登时直接设置file_upload_limit参数即可以,
如果是修改物件,剩余上传文件数 = file_upload_limit - this.getStats().successful_uploads
回调函数swfupload_loaded_handler中设置如下,详细见handlers.js

代码 复制 - 运行

var stats = self.getStats();
self.customSettings.has_upload_num = parseInt(self.customSettings.has_upload_num);         //已上传文件总数(修改)
if (self.customSettings.has_upload_num > 0) {
    stats.successful_uploads = self.customSettings.has_upload_num;
    self.setStats(stats);    
}