webuploader.js上传图片、视频、附件

2017-08-11  本文已影响0人  夏末女巫

根据需求 修改了webuploader.js中的部分源代码

!(function(){
    var currentDate = new Date();
      GUID = currentDate.getHours() 
          + "" +currentDate.getMinutes()
          + "" +currentDate.getSeconds()
          + "" +currentDate.getMilliseconds();
//上传图片
  $.extend({
    uploadPicture:function(obj){
      // 初始化Web Uploader
      var uploader = WebUploader.create({
          // 选完文件后,是否自动上传。
          auto: true,
          method:'POST',
          fileNumLimit:obj.fileNumLimit,//验证文件总数量, 超出则不允许加入队列
          fileSingleSizeLimit:obj.fileSingleSizeLimit ,//5*1024*1024,//验证单个文件大小是否超出限制, 超出则不允许加入队列
          // swf文件路径
          swf: 'Uploader.swf',
          // 文件接收服务端。
          server: obj.server,//'/page/page.json',
          // 选择文件的按钮。可选。
          // 内部根据当前运行是创建,可能是input元素,也可能是flash.
          pick: obj.pick,//'#filePicker',
          // 只允许选择图片文件。
          accept: obj.accept,
          thumb:{
            width: 110,
            height: 110,
            // 图片质量,只有type为`image/jpeg`的时候才有效。
            quality: 70,
            // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.
            allowMagnify: true,
            // 是否允许裁剪。
            crop: true,
            // 为空的话则保留原有图片格式。
            // 否则强制转换成指定的类型。
            type: ''//'image/jpeg'
          },
          duplicate:true,
          compress:false,
          resize:obj.resize||false // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
      });
      //由于每次点击弹出框时,原有的按钮都会变大,在此处新初始化一个按钮覆盖掉原有的按钮
      uploader.addButton({
            id: '#addPictureButton',
            innerHTML: '+'
        });
      var i = $("#pictureList .info").length;
      $(".ui-dialog-title").html("上传图片  ("+i+"/12)");
      // 当有文件添加进来的时候
      uploader.on( 'fileQueued', function( file ) {
        //图片数目限制为12张
          if($('.file-item').length<12){
              //创建新添加图片和删除条
              var $li = $(
                      '<div id="' + file.id + '" class="file-item thumbnail">' +
                          '<img>' +'<span class="delBtn">x</span>'+
                          '<div class="info"></div>'+
                          '<input class="imgPath"  type="hidden">'+
                      '</div>'
                      ),
                  $info = $li.find('.info'),
                  $img = $li.find('img');
              //删除图片          
              var $del= $li.find('.delBtn');
              $del.click(function() {
                var i = $("#pictureList .info").length-1;
                $(".ui-dialog-title").html("上传图片  ("+i--+"/12)");
                $(this).fadeOut("normal",function(){
                $(this).parents('div.file-item').remove();
                 uploader.removeFile( file );
            })
        });
              
          }
        //将新添加图片放入缩略图容器
          $('#pictureList').append( $li );
        //为图片删除条添加单击删除事件
          $info.on('click', function () {
              //将图片移除上传序列
              uploader.removeFile(file, true);
              //将图片从缩略图容器删除
              var $li = $('#' + file.id);
              $li.off().remove();
              $('#filePicker').children().css('display','');
              if ($('#filePicker').attr('class') === 'qyfc_upload webuploader-container') {
                $('#filePicker').css('background', 'url("images/chooseImg_qyfc.png") 0 0 no-repeat');
              } else {
                $('#filePicker').css('background', 'url("images/chooseImg_grzp.png") 0 0 no-repeat');
              }
            });
          
          // 创建缩略图
          // 如果为非图片文件,可以不用调用此方法。
          // thumbnailWidth x thumbnailHeight 为 100 x 100
          var thumbnailWidth = 100,
              thumbnailHeight=100;
          uploader.makeThumb( file, function( error, src ) {
              if ( error ) {
                  $img.replaceWith('<span>不能预览</span>');
                  return;
              }

              $img.attr( 'src', src );
          }, thumbnailWidth, thumbnailHeight );
      });


      // 文件上传过程中创建进度条实时显示。
      uploader.on( 'uploadProgress', function( file, percentage ) {
          var $li = $( '#'+file.id ),
              $percent = $li.find('.progress .progress-bar');
              $info = $li.find('.info');

          // 避免重复创建
          if ( !$percent.length ) {
              $percent = $('<div class="progress"><div id="progress-bar" class="progress-bar progress-info"></span></div>')
                      .appendTo( $li )
                      .find('.progress-bar');
          }
          $info.css({display: 'none'});
          $percent.css( 'width', percentage * 100 + '%' );
      });
      
      // 文件上传成功,给item添加成功class, 用样式标记上传成功。
      uploader.on( 'uploadSuccess', function( file ,response) {
         
          var $li = $('#' + file.id), $info = $li.find('.info');
          for(var i=0;i<$("#pictureList .info").length+1;i++){
              $(".ui-dialog-title").html("上传图片  ("+i+"/12)");
          } 
          var $input = $li.find('.imgPath');
          $li.off();
          $info.off().text('上传成功!').css({color: 'green', display: 'block',textAlign:'center',paddingTop:'10px'});
          $input.off().val(response.imgPath);
          if(obj.success){
              obj.success.call(this,file,response);
              return ;
          }
          //$( '#'+file.id ).addClass('upload-state-done');
          $('input[name="'+obj.inputName+'"]').val(response.imgPath);
          console.log(response.webUrl);
          $("#logourl").val(response.webUrl);
          $( '#'+file.id ).addClass('upload-state-done');
         

      });
//      // 文件上传失败,显示上传出错。
//      uploader.on( 'uploadError', function( file ) {
//        var $li = $('#' + file.id),
//          $info = $li.find('.info');
//          $info.off().text('上传失败!').css({color: 'red', display: 'block'});
//      });
   // 文件上传失败,显示上传出错。
      uploader.on( 'error', function( type,handler ) {
          if(!we.utils.isEmpty(obj.error)){
              obj.error.call(this,type,handler);
          }
          
          var message="文件上传失败";
            if(type=="Q_TYPE_DENIED"){
                message="只允许上传"+obj.accept.extensions+"格式的文件 "
            }else if(type=="F_EXCEED_SIZE"){
                message="文件大小不允许超过"+WebUploader.Base.formatSize( obj.fileSingleSizeLimit )
            }else if (type == "Q_EXCEED_NUM_LIMIT"){
                message="最多只允许上传" + obj.fileNumLimit + "张图片!";
            }else if (type=="F_DUPLICATE"){
                return ;
            }
            $dialog.alert({
                type:'warning',
                title:'温馨提示',
                content:message
            });
      });
      // 完成上传完了,成功或者失败,先删除进度条。
      uploader.on( 'uploadComplete', function( file ) {
          $( '#'+file.id ).find('.progress').remove();
          var $li = $('#' + file.id);
          //上传完如果删除图片          
          var $del= $li.find('.delBtn');
          $del.click(function() {
                    var i = $(".info").length-1; 
                    $(".ui-dialog-title").html("上传图片  ("+i--+"/12)");
                    $(this).fadeOut("normal",function(){
                    $(this).parents('div.file-item').remove();
                     uploader.removeFile( file );
                })
            });
      });
      
      if(obj.destroy==true){
        uploader.destroy();
      }
    }
  })   
$.extend({
    uploadVideo:function(obj){
          // 初始化Web Uploader
          var uploader = WebUploader.create({
              // 选完文件后,是否自动上传。
              auto: true,
              method:'POST',
              dnd:obj.dnd,
              fileNumLimit:obj.fileNumLimit,//验证文件总数量, 超出则不允许加入队列
              fileSingleSizeLimit:obj.fileSingleSizeLimit *1024*1024,//5*1024*1024,//验证单个文件大小是否超出限制, 超出则不允许加入队列
              // swf文件路径
              swf: 'Uploader.swf',
              // 文件接收服务端。
              server: obj.server,//'/page/page.json',
              pick : {id : obj.pick,
                  //只能选择一个文件上传
                  multiple: obj.multiple || false},
              //限制只能上传一个文件
              // 只允许选择图片文件。
              accept: {
                    title: 'doc',
                    extensions: obj.accept
                    },
              threads: 1,
              duplicate:true,
              chunked: true,
              chunkSize: 1024 * 1024,
              formData : {guid : GUID} ,
              resize:obj.resize||false // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
          });
          
        //由于每次点击弹出框时,原有的按钮都会变大,在此处新初始化一个按钮覆盖掉原有的按钮
           uploader.addButton({
                id: '#addVideoButton',
                innerHTML: '上传视频'
            });

          // 当有文件添加进来的时候
          uploader.on( 'fileQueued', function( file ) {
              
              $( '#videoList').find('.error').remove();
              var $div = $(
                      '<div id="' + file.id + '" class="item">' +
                         '<div class="info">' + file.name + '<span class="delVideoBtn">删除</span>'+'</div>' +
                         '<input class="videoPath"  type="hidden">'+
                      '</div>'
                );
             
                $('#videoList').append( $div );
                var $li = $('#' + file.id);
                //中途删除视频          
                 var $del= $li.find('.delVideoBtn');
                  $del.show();
                  $del.click(function() {
                    //重置队列                
                      uploader.reset();
                      $(this).fadeOut("normal",function(){
                        $(this).parents('div.item').remove();
                      })
                      $('#addVideoButton').show();
                      $('#addVideoButton .webuploader-pick').text('上传视频');
                      $('#videoList').css("background","url(/static/modules/common/images/upvideo.png)100px 80px no-repeat");
                    });
          });


          // 文件上传过程中创建进度条实时显示。
          uploader.on( 'uploadProgress', function( file, percentage ) {
              $('#addVideoButton .webuploader-pick').text('上传中...');
              var $li = $( '#'+file.id ),
                  $percent = $li.find('.progress .progress-bar');

              // 避免重复创建
              if ( !$percent.length ) {
                  $percent = $('<div class="progress"><div id="progress-bar" class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 10%"></div></div>')
                          .appendTo( $li )
                          .find('.progress-bar');
              }

              $percent.css( 'width', percentage * 100 + '%' );
          });

          // 文件上传成功,给item添加成功class, 用样式标记上传成功。
          uploader.on( 'uploadSuccess', function( file ,response) {
              $('#videoList').css("background","url(/static/modules/common/images/example.jpg)4px 45px no-repeat")
              $('#addVideoButton').hide();
              var $li = $('#' + file.id);
              var $input = $li.find('.videoPath');
              $input.off().val(response.filePath);
              if(obj.success){
                  obj.success.call(this,file,response);
                  $( '#'+file.id ).addClass('upload-state-done');
                  return ;
              }
             
          });

          // 文件上传失败,显示上传出错。
          uploader.on( 'uploadError', function( file ) {
              var $li = $( '#'+file.id ),$error = $li.find('div.error');

              // 避免重复创建
              if ( !$error.length ) {
                  $error = $('<div class="error"></div>').appendTo( $li );
              }

              $error.text('上传失败');
          });
          
      //  验证大小
          uploader.on("error",function (type){ 
                console.log(type);
                var $li = $( '#videoList'),$error = $li.find('div.error');
                
                if ( !$error.length ) {
                    $error = $('<div class="error"></div>').appendTo( $li );
                }
      
               if(type == "F_DUPLICATE"){
                   $error.text("请不要重复选择文件!");
               }else if(type == "F_EXCEED_SIZE"){
                   $error.text("附件大小不可超过" + obj.fileSingleSizeLimit + "M!");
               }else if(type == "Q_TYPE_DENIED"){
                   $error.text("请上传格式为" + obj.msgs + "的附件!");
               }else if (type == "Q_EXCEED_NUM_LIMIT"){
                   $error.text("最多只允许上传" + obj.fileNumLimit + "个视频!");
               }
           });
          
          // 完成上传完了,成功或者失败,先删除进度条。
          uploader.on( 'uploadComplete', function( file ) {
              $( '#'+file.id ).find('.progress').remove();
          });
        }
      })

$.extend({
    uploadFile:function(obj){
      // 初始化Web Uploader
      var uploader = WebUploader.create({
          // 选完文件后,是否自动上传。
          auto: true,
          method:'POST',
          dnd:obj.dnd,
          fileNumLimit:obj.fileNumLimit,//验证文件总数量, 超出则不允许加入队列
          fileSingleSizeLimit:obj.fileSingleSizeLimit *1024*1024,//5*1024*1024,//验证单个文件大小是否超出限制, 超出则不允许加入队列
          // swf文件路径
          swf: 'Uploader.swf',
          // 文件接收服务端。
          server: obj.server,//'/page/page.json',
          pick : {id : obj.pick,
              //只能选择一个文件上传
              multiple: obj.multiple || false},
          //限制只能上传一个文件
          // 只允许选择图片文件。
          accept: {
                title: 'doc',
                extensions: obj.accept
                },
          threads: 1,
          duplicate:true,
          chunked: true,
          chunkSize: 1024 * 1024,
          formData : {guid : GUID} ,
          resize:obj.resize||false // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
      });
      
    //由于每次点击弹出框时,原有的按钮都会变大,在此处新初始化一个按钮覆盖掉原有的按钮
        uploader.addButton({
            id: '#addFileButton',
            innerHTML: '上传附件'
        });
     
       var i = $("#fileList .info").length;
      $(".ui-dialog-title").html("上传附件 ("+i+"/3)");
      // 当有文件添加进来的时候
      uploader.on( 'fileQueued', function( file ) {
          $( '#fileList').find('.error').remove();
          var $div = $(
                  '<div id="' + file.id + '" class="item" style="background:#eee;padding:5px 10px;margin-top:15px">' +
                     '<div class="info">' + file.name + '<span class="delFileBtn">删除</span>'+'</div>' +
                     '<input class="filePath"  type="hidden">'+
                  '</div>'
            );
          $('#fileList').append( $div );
          //中途删除文件       
          var $li = $('#' + file.id);
          var $del= $li.find('.delFileBtn');
          $del.show();
          $del.click(function() {
              if(!$('#fileList').val()){
                  $('#fileList').css("background","url(/static/modules/common/images/upfile.png)154px 80px no-repeat");
              }
                $(this).fadeOut("normal",function(){
                    $(this).parents('div.item').remove();
                     uploader.removeFile( file );
                })
            });
           
      });


      // 文件上传过程中创建进度条实时显示。
      uploader.on( 'uploadProgress', function( file, percentage ) {
          
          var $li = $( '#'+file.id ),
              $percent = $li.find('.progress .progress-bar');

          // 避免重复创建
          if ( !$percent.length ) {
              $percent = $('<div class="progress"><div id="progress-bar" class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 10%"></div></div>')
                      .appendTo( $li )
                      .find('.progress-bar');
          }

          $percent.css( 'width', percentage * 100 + '%' );
      });

      // 文件上传成功,给item添加成功class, 用样式标记上传成功。
      uploader.on( 'uploadSuccess', function( file ,response) {
          $('#fileList').css("background","");
          for(var i=0;i<$("#fileList .info").length+1;i++){
              $(".ui-dialog-title").html("上传附件  ("+i+"/3)");
          } 
          var $li = $('#' + file.id);
          var $input = $li.find('.filePath');
          $input.off().val(response.filePath);
          if(obj.success){
              obj.success.call(this,file,response);
              $( '#'+file.id ).addClass('upload-state-done');
              //上传完删除文件          
              var $del= $li.find('.delFileBtn');
              $del.show();
              $del.click(function() {
                  if($('#fileList').val()==""){
                      $('#fileList').css("background","url(/static/modules/common/images/upfile.png)154px 80px no-repeat");
                  }
                  var i = $("#fileList .info").length-1; 
                  $(".ui-dialog-title").html("上传附件 ("+i--+"/3)");
                    $(this).fadeOut("normal",function(){
                        $(this).parents('div.item').remove();
                         uploader.removeFile( file );
                    })
                });
              return ;
          }
        
      });

      // 文件上传失败,显示上传出错。
      uploader.on( 'uploadError', function( file ) {
          var $li = $( '#'+file.id ),$error = $li.find('div.error');

          // 避免重复创建
          if ( !$error.length ) {
              $error = $('<div class="error"></div>').appendTo( $li );
          }

          $error.text('上传失败');
      });
      
  //  验证大小
      uploader.on("error",function (type){ 
            console.log(type);
            var $li = $( '#fileList'),$error = $li.find('div.error');
            
            if ( !$error.length ) {
                $error = $('<div class="error"></div>').appendTo( $li );
            }
  
           if(type == "F_DUPLICATE"){
               $error.text("请不要重复选择文件!");
           }else if(type == "F_EXCEED_SIZE"){
               $error.text("附件大小不可超过" + obj.fileSingleSizeLimit + "M!");
           }else if(type == "Q_TYPE_DENIED"){
               $error.text("请上传格式为" + obj.msgs + "的附件!");
           }else if (type == "Q_EXCEED_NUM_LIMIT"){
               $error.text("最多只允许上传" + obj.fileNumLimit + "个附件!");
           }
       });
      
      // 完成上传完了,成功或者失败,先删除进度条。
      uploader.on( 'uploadComplete', function( file ) {
          $( '#'+file.id ).find('.progress').remove();
      });  
    }
  })
})();

对应上传图片的js如下

 /*上传图片弹框*/
        $('#pictureButton').live("click",function(){
            /*判断是否已经上传了视频*/
          if($('#videoUrl').val()==""){
            var $d = $dialog.dialog({
                  id:'dialogPicture',
                  title:'上传图片(0/12)',
                  content:$('#addPicture'),
                  width:700,
                  onshow:function(){
                    //图片上传
                    $.uploadPicture({
                        server:'/file/uploadImage.html',
                        pick:'#addPictureButton',
                        multiple:false,
                        fileSingleSizeLimit:5*1024*1024,
                        fileNumLimit:12,
                        accept:{
                            title: 'Images',
                            extensions: 'gif,jpg,jpeg,bmp,png',
                            mimeTypes: 'image/jpg,image/jpeg,image/png*'
                        },
                        success:function(file ,data){
                            
                        }
                    });
                  },
                  okValue:'确定',
                  ok:function(){
                      //获得所有class为imgPath输入域中的value
                      $("input[class=imgPath]").each(function(){
                          pictureUrl += $(this).val()+";";
                      })
                      $("#pictureUrl").val(pictureUrl);
                      this.title('提交中…');
                      setTimeout(function () {
                          $d.close().remove();
                      }, 1000);
                  },
                  cancelValue:'取消',
                  cancel:function(){

                  },
                  onclose:function(){
                      
                  }
              });
          }else{
                $dialog.confirm({
                    title:'温馨提示',
                    width:'350',
                    content:'图片和视频不可以同时上传,确认要放弃上传视频吗?',
                    okValue:'确认',
                    ok:function(){
                        $('#videoUrl').val("");
                        var $d = $dialog.dialog({
                              id:'dialogPicture',
                              title:'上传图片(0/12)',
                              content:$('#addPicture'),
                              width:700,
                              onshow:function(){
                                //图片上传
                                $.uploadPicture({
                                    server:'/file/uploadImage.html',
                                    pick:'#addPictureButton',
                                    multiple:false,
                                    fileSingleSizeLimit:5*1024*1024,
                                    fileNumLimit:12,
                                    accept:{
                                        title: 'Images',
                                        extensions: 'gif,jpg,jpeg,bmp,png',
                                        mimeTypes: 'image/jpg,image/jpeg,image/png*'
                                    },
                                    success:function(file ,data){
                                        
                                    }
                                });
                              },
                              okValue:'确定',
                              ok:function(){
                                  //获得所有class为imgPath输入域中的value
                                  $("input[class=imgPath]").each(function(){
                                      pictureUrl += $(this).val()+";";
                                  })
                                  $("#pictureUrl").val(pictureUrl);
                                  this.title('提交中…');
                                  setTimeout(function () {
                                      $d.close().remove();
                                  }, 1000);
                              },
                              cancelValue:'取消',
                              cancel:function(){

                              },
                              onclose:function(){
                                  
                              }
                          });
                    },
                    cancelValue:'取消',
                    cancel:function(){
                        $('#pictureUrl').val("");
                    }
                });
          }
        });
    

对应上传视频的js如下

  /*上传视频弹框*/
        $('#videoButton').live("click",function(){
            //判断是否已经上传了图片
         if($('#pictureUrl').val()==""){
            var $d = $dialog.dialog({
                  id:'dialogVideo',
                  title:'上传视频',
                  content:$('#addVideo'),
                  width:500,
                  onshow:function(){
                    //视频上传
                    $.uploadVideo({
                        server:'/attachment/uploadVideo.html',
                        pick:'#addVideoButton',
                        accept:'mp4,MP4,webm',
                        msgs:"mp4,webm",
                        multiple:false,
                        fileSingleSizeLimit:600,
                        fileNumLimit:1,
                        success:function(file ,data){
                            
                        }
                    });
                  },
                  okValue:'确定',
                  ok:function(){
                    //获得所有class为videoPath输入域中的value
                      $("input[class=videoPath]").each(function(){
                          videoUrl += $(this).val();
                      })
                      $('input[name="videoUrl"]').val(videoUrl);
                      this.title('提交中…');
                      setTimeout(function () {
                          $d.close().remove();
                      }, 1000);
                  },
                  cancelValue:'取消',
                  cancel:function(){
                      
                  },
                  onclose:function(){
                      
                  }
              });
         }else{
             $('#videoButton').live("click",function(){
                    $dialog.confirm({
                        title:'温馨提示',
                        width:'350',
                        content:'图片和视频不可以同时上传,确认要放弃上传图片吗?',
                        okValue:'确认',
                        ok:function(){
                            $('#pictureUrl').val("");
                            var $d = $dialog.dialog({
                                  id:'dialogVideo',
                                  title:'上传视频',
                                  content:$('#addVideo'),
                                  width:500,
                                  onshow:function(){
                                    //视频上传
                                    $.uploadVideo({
                                        server:'/attachment/uploadVideo.html',
                                        pick:'#addVideoButton',
                                        accept:'mp4,MP4,webm',
                                        msgs:"mp4,webm",
                                        multiple:false,
                                        fileSingleSizeLimit:600,
                                        fileNumLimit:1,
                                        success:function(file ,data){
                                            
                                        }
                                    });
                                  },
                                  okValue:'确定',
                                  ok:function(){
                                    //获得所有class为videoPath输入域中的value
                                      $("input[class=videoPath]").each(function(){
                                          videoUrl += $(this).val();
                                      })
                                      $('input[name="videoUrl"]').val(videoUrl);
                                      this.title('提交中…');
                                      setTimeout(function () {
                                          $d.close().remove();
                                      }, 1000);
                                  },
                                  cancelValue:'取消',
                                  cancel:function(){
                                      
                                  },
                                  onclose:function(){
                                      
                                  }
                              });
                        }
                  });
             });
         }
        });

对应上传附件的js如下

/*添加附件弹出框*/
    $('#fileButton').live("click",function(){
        var $d = $dialog.dialog({
              id:'dialogFile',
              title:'上传附件 (0/3)',
              content:$('#addFile'),
              width:500,
              onshow:function(){
                /*附件上传*/
                $.uploadFile({
                    server:'/attachment/uploadDoc.html',
                    pick:'#addFileButton',
                    accept:'txt,xls,xlsx,doc,docx,ppt,pptx,pdf,rar,zip',
                    msgs:'txt,xls,xlsx,doc,docx,ppt,pptx,pdf,rar,zip',
                    multiple:false,
                    fileSingleSizeLimit:200,
                    fileNumLimit:3,
                    success:function(file ,data){
                    }
                });
              },
              okValue:'确定',
              ok:function(){
                //获得所有class为imgPath输入域中的value
                  $("input[class=filePath]").each(function(){
                      fileUrl += $(this).val()+";";
                  })
                  $('input[name="fileUrl"]').val(fileUrl);
                  this.title('提交中…');
                  setTimeout(function () {
                      $d.close().remove();
                  }, 1000);
              },
              cancelValue:'取消',
              cancel:function(){
                  
              },
              onclose:function(){
                  
              }
          });
    });
上一篇下一篇

猜你喜欢

热点阅读