2017-09-19 8 views
1

유지 관리를 담당하는 플랫폼에서 이상한 현상이 나타납니다.파일을 Plupload, 이상하게 이름을 변경합니다.

사이트에서 plupload를 사용하여 이미지와 파일을 추가합니다. 며칠 후, 오스트리아, 스위스, 독일 등에서 12 명의 사용자가 업로드하는 동안 파일의 이름이 변경되었습니다.

"my_image.png"를 보내면 저장소에이 이름으로 저장되거나이 이름으로 다른 파일이 이미 있으면 (1)을 추가합니다. 현재, 그것은 체계적으로 파일의 이름을 --1 또는 --2 [...]로 바꿉니다 (예 : my_image - 1.png). 데이터베이스에 파일 이름을 등록 할 때이 변경 사항을 고려해도 문제가되지는 않습니다.

동료 및 연구원의 도움에도 불구하고이 상황에 대한 설명이 없습니다. 그것은 매우 부분적이며 이미 발견되지 않고 2016 년 말에 이미 발생했습니다. 누구도이 문제를 겪은 적이 있습니까?

나는 우리에게 plupload의 코드를 제공합니다.

자세한 내용은 사용자가 Internet Explorer (최신 버전)를 사용하고 우리 측에서는 버그가 발생하지 않았으므로 버그를 재현하려는 시도는 헛된 것입니다. 관심

function addUpload(form_,type_,container_,button_,multiple_,ext_,params) { 
    var extended_parameters = new Array(); 
    type_ = 'file_name_'+type_+'[]'; 
    return addUploadApply(form_,type_,container_,button_,multiple_,ext_,params, extended_parameters); 
} 

//La principale différence entre addUpload et addUploadV2 est que pour la seconde, le name fourni pour le champ (variable type_ = input_name) n'est pas réécrit par la fonction, il est utilisé tel quel ce qui est bien plus pratique pour le dévelopepment 
function addUploadV2(form_id, input_name, container_id, upload_button_id, multiple_, ext_, http_get_params, extended_parameters) { 
    return addUploadApply(form_id, input_name, container_id, upload_button_id, multiple_, ext_, http_get_params, extended_parameters); 
} 

//Cette fonction a été redéfinie dans le cadre de MultiALL 
//On y ajoute un tableau de parameters afin de gérer d'éventuels paramètres supplémentaires, ce qui est compliqué à faire à l'heure actuelle 
//Ca nous servira plus tard 
function addUploadApply(form_,type_,container_,button_,multiple_,ext_,params, extended_parameters){ nb_upload_fields++; 

    var nb_fichiers = 0; 
    var total_files_size = 0; 

    var file_upload = '/backoffice/upload.php?'+params; 

    var uploader = new plupload.Uploader({ 
     multi_selection: false, 
     form : form_, 
     runtimes : 'gears,html5,flash,silverlight,browserplus,html4', 
     browse_button : button_, 
     container : container_, 
     //max_file_size : '2mb', 
     max_queue_size : '62914560', // 60 Mo 
     url : file_upload, 
     flash_swf_url : '/plupload/plupload.flash.swf', 
     silverlight_xap_url : '/plupload/plupload.silverlight.xap', 
     filters : [ 
      {title : "Files", extensions : ext_} 
     ] 
    }); 

    uploader.init(); 


    uploader.bind('FilesAdded', function(up, files) { 

     /*$('#next_btn').hide();*/ 
     if(!multiple_ && nb_fichiers > 0){ 
      $('#'+container_+' .inputlist, #'+container_+' .filelist').html(""); 
      nb_fichiers = 0; 
     } 

     $.each(files, function(i, file) { 
      total_files_size += file.size; 
     }); 

     if(total_files_size < uploader.settings.max_queue_size){ 

      $.each(files, function(i, file) { 

       nb_fichiers++; 
       c_ = '<div class="col-md-4" id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b>'; 

       if(multiple_){ $('#'+container_+' .filelist').append(c_); } 
       else{ $('#'+container_+' .filelist').html(c_); } 

      }); 

      nb_upload_uploading++; 
      up.refresh(); // Reposition Flash/Silverlight 
      uploader.start(); 

     }else{ 
      $.each(files, function(i, file) { 
       total_files_size -= file.size; 
       up.removeFile(file); 
      }); 
      if(!$('#'+container_+' .filelist div').length) $('#'+container_+' .filelist').append('<div></div>'); 
      $('#'+container_+' .filelist div').prepend('<b>ERROR</b> ').css('color', '#ff0000'); 
      alert('Error : 11 The selected file is too big.'); 
      //$('#plupload_error').modal(); 
     } 

    }); 

    uploader.bind('UploadProgress', function(up, file) { 
     $('#'+uploader.settings.form+' #' + file.id + " b").html(file.percent + "%"); 
    }); 

    uploader.bind('Error', function(up, err) { 

      $('#'+container_+' .filelist div').prepend('<b>ERROR</b> ').css('color', '#ff0000'); 
      alert('Error : '+obj.error.code+' '+obj.error.message); 

     /*$('#'+uploader.settings.form+' #filelist').append("<div>Error: " + err.code + 
      ", Message: " + err.message + 
      (err.file ? ", File: " + err.file.name : "") + 
      "</div>" 
     );*/ 

     up.refresh(); // Reposition Flash/Silverlight 
    }); 

    uploader.bind('FileUploaded', function(up, file, info) { 
     $('#'+container_+' .inputlist ' + file.id + " b").html("100%"); 
     var obj = JSON.parse(info.response); 

     // Détection d'une erreur dans le PHP 
     if (obj.error !== undef) { 
      $('#'+container_+' .filelist div').prepend('<b>ERROR</b> ').css('color', '#ff0000'); 
      alert('Error : '+obj.error.code+' '+obj.error.message); 
      return false; 
     } 

     var c_ = '<input type="hidden" name="'+type_+'" value="' + obj.result.cleanFileName + '" class="uploadedFile ' + file.id + '" />'; 
     if(multiple_){ $('#'+container_+' .inputlist').append(c_); } 
     else{ 
     //$('#'+container_+' .inputlist').html(""); 
     if ($('#'+container_+' .inputlist .uploadedFile').length && $('#'+container_+' .inputlist .uploadedFile').attr('name') != '') $('#'+container_+' .inputlist .uploadedFile').val(obj.result.cleanFileName); 
     else $('#'+container_+' .inputlist').html(c_); 
    } 
    if ($('#'+container_+' .fileRemoveButton').length) $('#'+container_+' .fileRemoveButton').show(); 
    }); 

    uploader.bind('UploadComplete', function(up, file) { 
     nb_upload_completed++; 
     if(check_upload()){ $('#next_btn').show(); } 
    }); 

} 
+0

서버의 백엔드에 업로드 논리를 표시 할 수 있습니까? '/ backoffice/upload.php' 파일과 비슷합니까? (또는 가능한 경우 관련 부분 만) – Wndrr

답변

0

에 대한

덕분에 내가 그것을 제대로 해결하는 방법을 알고 있지만, 내가 무엇을 당신이 할 조언하지 않는다는 보장하기 위해 고유 한 이름을 가져야 할 파일을 강제하는 것입니다 충돌하지 않습니다 나오다.

각 파일에 의사 무작위 해시를 추가하면 이름을 임의로 만들 수 있지만 원래 이름은 그대로 유지됩니다. 이렇게하면 충돌을 방지하고 최종 파일에 대한 완전한 제어권과 지식을 갖게됩니다.

+0

답장을 보내 주셔서 감사합니다. 우리는 그것에 대해 생각했지만 문제의 파일은 이전에 존재하지도 않았고 이름도 존재하지 않았습니다. 파일의 이름을 바꿀 이유가 없습니다. 파일 이름이 같으면 데이터베이스 레코드의 새 이름을 바꾸고 이름을 지정하여 올바르게 작동합니다. 저기서, 그는 아무 이유없이 이름을 바꾸고 새로운 이름을 불러 오지 않습니다. – Anna

+0

arf, 죄송합니다. 문제를 오해해서 미안 해요./내가 도와 드릴 수 있다고 생각하지 않아서 죄송합니다. – Wndrr

+0

시도해 주셔서 감사합니다. – Anna

0

문제가 해결되었으며 플러그인에서 가져 오지 않았습니다. 다른 개발자가 콘텐츠를 복제하기 위해 코드를 수정했습니다. 그것은 주변에 상관없이 변경되었고 그 이후로 더 이상 제대로 작동하지 않았습니다.

관심과 도움에 감사드립니다.