2017-09-19 56 views
1

在我负责维护的平台上,出现了一个奇怪的现象。Plupload,奇怪地重命名文件

在网站上,我们使用plupload添加图像和文件。几天之后,在上传过程中,十几位用户(奥地利,瑞士和德国等)上传文件时,文件被重新命名。

如果我发送“my_image.png”,这样可以节省它用这个名字库或它增加了(1)如果另一个文件下该名称已经存在。目前,它使用 - 1或 - 2 [...](例如:my_image - 1.png)系统地重命名文件。如果在数据库中注册文件名时将此更改考虑在内,则这不成问题,但情况并非如此。

尽管我的同事们的帮助下,研究,对这种情况没有解释。它是超部分的,并且已经在2016年底发生,没有被发现。有没有人遇到过这个问题?

我给你我们我们plupload的代码。

有关其他信息,我们的用户使用Internet Explorer(最新版本),并在我们的身边,没有错误引发,我们试图重现bug是徒劳的。

感谢您的关注

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

问题已解决,并非来自插件。另一位开发人员修改了(当我生病时)复制内容的代码。它改变了而不考虑周围的事物,从那以后,它不再适用。

感谢您的关注和帮助。