javascript将表单模型名称添加到formdata

时间:2018-03-26 08:58:38

标签: javascript php treeview multipartform-data kartik-v

更新:以下是如何通过从kartik中的treeview小部件中的文件夹中删除文件来添加文件:

 function allowDrop(event) {
        event.preventDefault();
    }

    function drop(event) {
        event.preventDefault();
        var dropFiles = event.dataTransfer.files;
        event.target.click();
            setTimeout(function(){
                var formData = new FormData();
                $.each(dropFiles, function(i, file){  
                    formData.append('Files[files][]',file);  //Files[files][] is the key to making this work with kartik treeview widget
                });                  

                $.ajax({
                       url : '/files/upload-files',
                       type : 'POST',
                       data : formData,
                       processData: false,  // tell jQuery not to process the data
                       contentType: false,  // tell jQuery not to set contentType
                       success : function(data) {
                           // console.log(data);
                       }
                });
            }, 1000);
    }

    function highlightToggle(event) {
        event.preventDefault();
        event.target.classList.toggle("highlightDrop");
    }

原始问题和疑问:

给定此代码创建的表单:

echo $form->field($modalModel, 'files[]')->fileInput(['multiple' => true]); ?>

创建一个这样的表单:

<input type="file" id="files-files" name="Files[files][]" multiple="">

并生成如下形式的formdata: (注意&#39; Files&#39;数组中的&#39;文件&#39;数组)

  array(1) {
["Files"]=>
array(5) {
  ["name"]=>
  array(1) {
    ["files"]=>
    array(1) {
      [0]=>
      string(15) "Skjermbilde.PNG"
    }
  }
  ["type"]=>
  array(1) {
    ["files"]=>
    array(1) {
      [0]=>
      string(9) "image/png"
    }
  }
  ["tmp_name"]=>
  array(1) {
    ["files"]=>
    array(1) {
      [0]=>
      string(18) "/run/tmp/phpOAvRyO"
    }
  }
  ["error"]=>
  array(1) {
    ["files"]=>
    array(1) {
      [0]=>
      int(0)
    }
  }
  ["size"]=>
  array(1) {
    ["files"]=>
    array(1) {
      [0]=>
      int(75933)
    }
  }
}

如何使用javascript生成完全相同的格式化数据? (没有形式)

这是我的尝试:

                var formData = new FormData();
            $.each(dropFiles, function(i, file){  
            formData.append('Files[]',file);                     
            // formData.append('Files[]',file, file['name']);//no difference                     
            // formData.append('Files[files[]]',file, file['name']);//no data submitted                      
            });

和结果:

  array(1) {
["Files"]=>
array(5) {
  ["name"]=>
  array(1) {
    [0]=>
    string(16) "Skjermbilde1.PNG"
  }
  ["type"]=>
  array(1) {
    [0]=>
    string(9) "image/png"
  }
  ["tmp_name"]=>
  array(1) {
    [0]=>
    string(18) "/run/tmp/phpkwxGHp"
  }
  ["error"]=>
  array(1) {
    [0]=>
    int(0)
  }
  ["size"]=>
  array(1) {
    [0]=>
    int(74596)
  }
}

formdata必须包含&#39;文件&#39; “文件”中的元素&#39;元素与Kartik Treeview文件上传类一起使用。

感谢您的帮助。

以下是使用表单上传多个文件时的样子:

    ["Files"]=>
array(5) {
  ["name"]=>
  array(1) {
    ["files"]=>
    array(2) {
      [0]=>
      string(16) "Skjermbilde1.PNG"
      [1]=>
      string(15) "Skjermbilde.PNG"
    }
  }
  ["type"]=>
  array(1) {
    ["files"]=>
    array(2) {
      [0]=>
      string(9) "image/png"
      [1]=>
      string(9) "image/png"
    }
  }
  ["tmp_name"]=>
  array(1) {
    ["files"]=>
    array(2) {
      [0]=>
      string(18) "/run/tmp/phpKPbssh"
      [1]=>
      string(18) "/run/tmp/phpBDLxn0"
    }
  }
  ["error"]=>
  array(1) {
    ["files"]=>
    array(2) {
      [0]=>
      int(0)
      [1]=>
      int(0)
    }
  }
  ["size"]=>
  array(1) {
    ["files"]=>
    array(2) {
      [0]=>
      int(74596)
      [1]=>
      int(75933)
    }
  }
}

0 个答案:

没有答案