【问题标题】:Plupload, renames files strangelyPlupload,奇怪地重命名文件
【发布时间】:2018-02-27 22:11:19
【问题描述】:

在我负责维护的一个平台上,出现了一个奇怪的现象。

在网站上,我们使用 plupload 添加图像和文件。几天后,十几个用户(在奥地利、瑞士和德国等地)在上传期间,文件被重命名。

如果我发送“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(); }
    });

}

【问题讨论】:

  • 你能给我们展示一下服务器后端的上传逻辑吗?喜欢/backoffice/upload.php 文件? (或者如果可能的话,只有相关部分)

标签: file rename plupload


【解决方案1】:

我不知道如何正确修复它,但我所做的并建议您做的是强制文件具有唯一的名称,以确保不会发生冲突。

您可以通过将伪随机哈希附加到每个文件来做到这一点,从而使它们的名称随机化(但仍保留原始名称)。这将防止冲突,您将完全控制和了解最终文件。

【讨论】:

  • 感谢您的回答。我们想了想,但有问题的文件以前不存在,名字也不存在。没有理由重命名该文件。当一个文件具有相同的名称时,它的行为正确,重命名并为数据库记录提出新名称。在那里,他无缘无故地重命名,也没有提出新名字。
  • arf,对不起,我误解了这个问题:-/对不起,我认为我不能帮助你......
  • 感谢您的尝试:)
  • Avec plaisir :-)
  • 如果您找到解决问题的方法,请务必回答您自己的问题以供以后参考:-)
【解决方案2】:

问题已解决,并非来自插件。另一位开发人员(当我生病时)修改了代码以复制内容。它改变了,不考虑周围的情况,从那时起,它就不再正常工作了。

感谢您的关注和帮助。

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 2014-12-23
    • 2011-12-24
    • 1970-01-01
    • 2015-05-30
    • 2013-08-20
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多