将数组输入发送到后端时,Dropzone 插入与相同数量文件相同数量的值

Dropzone inserting the same number of values as the same number of files when sending array inputs to backend

我有一个简单的保管箱,可以在单击按钮时手动上传文件:

var dropzone = $("#dropzone-form").dropzone({
        autoProcessQueue: false,
        addRemoveLinks: true,
        paramName: "fotos",
        url: url,
        uploadMultiple: true,
        init: function(){
            var dropzone_object = this;



            $('#btn-guardar').on('click', function(e){
                if(checkForm()){
                    if(dropzone_object.files.length > 0){
                        dropzone_object.processQueue();
                    }else{
                      sendWithoutFiles();
                    }

                }
            });


        },
        sending: function(file, xhr, formData) {

            var formValues = $('#form-productos').serializeArray();
            $.each(formValues, function(i, obj){
               formData.append(obj.name, obj.value);
            });


        },
        success: function(file, response){

        },
        error: function(file, errorMessage, xhr){

        }
    });

但是我在上传多个文件时遇到了问题,因为我的表单中有数组输入,id 为 form-productos,例如:

<input name="emails[]">

<select name="colors[]"></select>

因此,对于 dropzone 队列具有的每个文件,它再次附加输入,不是数组输入的输入没有问题,因为该值再次被覆盖,所以假设我有以下输入(注意值):

<input name="emails[]" value="email1">
<input name="emails[]" value="email2">

而且,假设我有 2 个文件在队列中,当我按下按钮并且数据被发送到 PHP 时,我在打印“$request->emails 时得到以下信息":

array(
   'email1',
   'email2', //After this, since I uploaded two files, I get the same values again:
   'email1',
   'email2'  
)

阅读 dropzone documentation 清楚地表明这是正确的行为:

sending: Called just before each file is sent. Gets the xhr object and the formData objects as second and third parameters, so you can modify them (for example to add a CSRF token) or add additional data.

所以,问题出在我这边,在追加到 formData 时我能做些什么来防止这种情况?

我解决了用 sendingmultiple 轻松替换 send 事件的问题,当 uploadMultiple 选项设置为 true 时,大多数情况下应该使用此事件:

sendingmultiple: function(files, xhr, formData) {

            var formValues = $('#form-productos').serializeArray();
            $.each(formValues, function(i, obj){
               formData.append(obj.name, obj.value);
            });


        },

不同的是这个事件接收一个文件数组作为第一个参数,这样事件里面的过程只做一次。