2017-05-24 7 views
0

나는 pluploader를 초기화하는 뷰를 가지고 있습니다. 이보기를 종료하고 업로드가 완료되도록 허용 할 수 있습니다. 내가 가지고있는 문제는 뷰를 다시 입력 할 때마다 계속 진행중인 업로드가있을 때마다 "BeforeUpload"내에 할당 된 "processId"의 마지막 multipart_param이 각 파일에 대해 개별적으로 반복적으로 사용된다는 것입니다.plupload 진행중인 동적 multipart_params가 재 초기화시 손실 됨

다음은 예입니다. 뷰에 파일을 5 개 드롭합니다. 나는 그 전망을 떠난다. 그 사이에 2 파일 업로드 진행이 완료되었습니다. 파일 1의 processId는 "0123"이고 파일 2의 processId는 "0124"입니다. 그런 다음 다시보기로 들어갑니다. 이 스크립트는 다시 실행되었습니다. 나머지 파일은 모두 processId 0124로 지정됩니다.

언제든지 스크립트가 실행되어보기를 입력 할 때 어떤 것을 덮어 쓰고 있지만 아직 해결 방법을 찾지 못했기 때문에 이런 일이 일어 났을 것입니다.

는 는

당신은 내가 INT의 임의의 시리즈를 만들 BeforeUpload 내

var processId = process.createProcessId(file.index); 

그런 다음 아래이 줄을 가진 프로세스 ID라는 것을는 uploader.fileAdded 지역 내에서 볼 수있는, 내가 지정하는 multipart_param에 PROCESSID 있도록 업로드 할 때마다 고유 한 processId를 할당 할 수 있습니다.

uploader.settings.multipart_params.processId  = file.processId; 

모든 입력이 인식되는 스크립트

/* detects when a user drags files from the desktop */ 
initDragDetector:function(){ 
    var runtimes  = ui.getUploadRunTimes(); 
    var tmpId   = Math.random();     

    uploader = new plupload.Uploader({ 
     runtimes   :runtimes, 
     max_file_size  :'500mb', 
     url     :jQuery('#upSrvUrl').val(), 
     drop_element  :'uploadOverlay', 
     browse_button  :'uploadOverlay', 
     filters : [ 
      {title : "Image files", extensions : "jpg,tif,png,psd"}, 
     ], 
     max_file_count  :100, 
     multipart_params :{rnd_id:Math.random(),tmp_sid:tmpId}, 
     multi_selection  :true, 
     file_data_name  :'upfile_0', 
    }); 

    //INITIALIZATION HANDLER 1 
    uploader.bind('Init',function(up, params){ 
     uploader.settings.multipart_params.mount    = jQuery('#mount').val(); 
     uploader.settings.multipart_params.publisherId   = jQuery('#publisherId').val(); 
     uploader.settings.multipart_params.upload_range   = 100; 

     if(uploader.features.dragdrop){ 
      var el  = jQuery("#uploadOverlay"); 

      el[0].ondragover = function(event) { 
       event.dataTransfer.dropEffect = "copy"; 
      }; 
      el[0].ondragenter = function(e) { 
       if(e.dataTransfer.types.length < 4){ 
        el.show(); 
       } 
      }; 
      el[0].ondrop = function() { 
       if(jQuery('.photoThumbContainer').length > 0){ 
        el.hide(); 
       } 
      }; 
     } 
    }); 

    //FILES ADDED HANDLER 2 (called after a drop of files) 
    uploader.bind('FilesAdded', function(up, files){ 
     var i = 0; 
     plupload.each(files, function(file) { 
      file.index = i; 
      uploader.fileAdded(file); 
      i++; 
     }); 
     uploader.start(); 
    }); 

    //inject the file into the interface (before before upload function) 
    uploader.fileAdded = function(file){ 
     var processId   = process.createProcessId(file.index); 
     //added to the file object and passed into the registration 
     file.processId   = processId; 
    }; 

    //BEFORE EACH UPLOAD HANDLER 3 
    //Note: this has to be here for any variable passed that changes per file. For example the processId. 
    uploader.bind('BeforeUpload',function(up,file){ 
     var processId  = file.processId; 
     var photoDiv  = jQuery('#photo'+processId+' .photoThumbDiv'); 
     var image   = jQuery(new Image()).appendTo(photoDiv); 
     var preloader  = new mOxie.Image(); 

     preloader.downsize(100,100); 
     preloader.onload = function() { 
      var img   = preloader.getAsDataURL(); 
      jQuery('#photo'+processId+' .photoThumbDiv').html('<img src="'+img+'">'); 
     }; 
     preloader.load(file.getSource()); 

     uploader.settings.multipart_params.processId  = file.processId; 
    }); 

    //PROGRESS HANDLER 4 
    uploader.bind('UploadProgress',function(up,file){ 
     var processId = file.processId; 
     var pb   = collection.getProgressBar(processId); 
     if(file.percent<100){ 
      var progress = file.percent; 
      pb.html('<div class="progressBar"><div class="progressBarColor"> </div></div>'); 
      jQuery('#photo'+processId+' .progressBarColor').css({width:progress+'%'}); 
     }else{ 
      pb.html('<div class="loaderSmall"></div> Processing'); 
     } 
    }); 

    //FILE FINISHED HANDLER 5 
    uploader.bind('FileUploaded',function(up,file,info){ 
     var processId  = file.processId; 
     var fileName  = file.name; 
     file.fileName  = file.name; 
     var params   = file; 
     delete params.getNative; 
     delete params.getSource; 
     delete params.destroy; 
     ui.request('registerFile','Photo',params); 

     //ALL COMPLETE 
     if(uploadedCnt == up.files.length){ 
      //uploader.splice(); 
      uploader.refresh(); 
     } 
    }); 

    //GENERAL ERROR HANDLER - 
    uploader.bind('Error', function(up, err) { 
     switch(err.code){ 
      case plupload.FILE_EXTENSION_ERROR: 
       fileExtensions = ''; 
       jQuery.each(up.settings.filters.mime_types,function(index,up) { 
        if(fileExtensions==''){ 
         fileExtensions=up.extensions; 
        }else{ 
         fileExtensions+=","+up.extensions; 
        } 
       }); 
       var isOrAre = (fileExtensions && fileExtensions.indexOf(',') !== -1) ? 'are':'is'; 
       alertBox.msg("Only "+fileExtensions+" "+isOrAre+" accepted. Please try again."); 
       break; 
      case plupload.FILE_SIZE_ERROR: 
       alertBox.msg("File size can not be larger than "+up.settings.max_file_size+'.'); 
       break; 
     } 
     uploader.refresh(); 
    }); 

    uploader.init(); 
}, 

. 감사.

답변

0

여기 해결책에 관심이있는 사람은 누구나 업 로더가 전 세계적으로 설정 되었기 때문입니다. 업 로더를 초기화 할 때마다 업로드 앞에 'var'을 추가하여 수정했습니다.