var userInfo = {userId:"kazaff", md5:""};   //用户会话信息
                    var chunkSize = 5000 * 1024;        //分块大小
                    var uniqueFileName = null;          //文件唯一标识符
                    var md5Mark = null;
                    var backEndUrl = "{:U('File/shard_upload',array('type'=>1,'session_id'=>session_id()))}";
                   WebUploader.Uploader.register({
                        "before-send-file" : "beforeSendFile",
                        "before-send"      : "beforeSend",
                        "after-send-file"  : "afterSendFile"
                    }, {
                        beforeSendFile: function(file){
                            //秒传验证
                            if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
                                var task = new $.Deferred();
                                var start = new Date().getTime();
                                (new WebUploader.Uploader()).md5File(file, 0, 10*1024*1024).progress(function(percentage){
                                    //console.log(percentage);
                                }).then(function(val){
                                    //console.log("总耗时: "+((new Date().getTime()) - start)/1000);
                                    md5Mark = val;
                                    userInfo.md5 = val;
                                    $.ajax({
                                        type: "POST"
                                        , url: backEndUrl
                                        , data: {status: "md5Check", md5: val}
                                        , cache: false
                                        , timeout: 1000 //todo 超时的话,只能认为该文件不曾上传过
                                        , dataType: "json"
                                    }).then(function(data, textStatus, jqXHR){
                                        alert(data.chunk);
                                        //console.log(data);
                                        if(data.ifExist){   //若存在,这返回失败给WebUploader,表明该文件不需要上传
                                            task.reject();
                                            uploader.skipFile(file);
                                            file.path = data.path;
                                        }else{
                                            task.resolve();
                                            //拿到上传文件的唯一名称,用于断点续传
                                            uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
                                        }
                                    }, function(jqXHR, textStatus, errorThrown){    //任何形式的验证失败,都触发重新上传
                                        task.resolve();
                                        //拿到上传文件的唯一名称,用于断点续传
                                        uniqueFileName = md5(''+userInfo.userId+file.name+file.type+file.lastModifiedDate+file.size);
                                    });
                                });
                                return $.when(task);
                            }
                        }
                        , beforeSend: function(block){
                            //分片验证是否已传过,用于断点续传
                            if (block['file']['source']['ext'] === 'zip' || block['file']['source']['ext'] === 'rar') {
                                var task = new $.Deferred();
                                $.ajax({
                                    type: "POST"
                                    , url: backEndUrl
                                    , data: {
                                        status: "chunkCheck"
                                        , name: uniqueFileName
                                        , chunkIndex: block.chunk
                                        , size: block.end - block.start
                                    }
                                    , cache: false
                                    , timeout: 1000 //todo 超时的话,只能认为该分片未上传过
                                    , dataType: "json"
                                }).then(function(data, textStatus, jqXHR){
                                    if(data.ifExist){   //若存在,返回失败给WebUploader,表明该分块不需要上传
                                        task.reject();
                                    }else{
                                        task.resolve();
                                    }
                                }, function(jqXHR, textStatus, errorThrown){    //任何形式的验证失败,都触发重新上传
                                    task.resolve();
                                });
                                return $.when(task);
                            }
                        }
                        , afterSendFile: function(file){
                            if (file['source']['ext'] === 'zip' || file['source']['ext'] === 'rar') {
                                var chunksTotal = 0;
                                if((chunksTotal = Math.ceil(file.size/chunkSize)) > 1){
                                    //合并请求
                                    var task = new $.Deferred();
                                    $.ajax({
                                        type: "POST"
                                        , url: backEndUrl
                                        , data: {
                                            status: "chunksMerge"
                                            , name: uniqueFileName
                                            , chunks: chunksTotal
                                            , ext: file.ext
                                            , md5: md5Mark
                                        }
                                        , cache: false
                                        , dataType: "json"
                                    }).then(function(data, textStatus, jqXHR){
                                        //todo 检查响应是否正常
                                        task.resolve();
                                        file.path = data.path;
                                        $("#file_name").val(data.name);
                                        $("#file_url").val(data.path+'/'+data.name);
                                        $("#file_size").val(file.size);
                                    }, function(jqXHR, textStatus, errorThrown){
                                        task.reject();
                                    });
                                    return $.when(task);
                                }else{
                                    //UploadComlate(file);
                                }
                            }
                        }
                    });