FormData键作为数组

时间:2017-04-12 14:11:01

标签: javascript forms form-data

我正在尝试使用FormData html5 api设置多文件上传。 问题是我无法删除FormData键上的数组的索引。 例如:

if(editor.frmData){
        editor.frmData.append( 'upload[]', files[0] );
    }else{
        editor['frmData']=new FormData();
    }

这是我选择文件时执行的代码。我选择了多个文件,在服务器(php)上,$ _FILES是带数组的数组。 例如:

    Array
(
    [upload] => Array
        (
            [name] => Array
                (
                    [0] => Screenshot from 2017-02-21 16:04:36.png
                    [1] => 20170314_124241.jpg
                    [2] => mob geografica.png
                )
            [type] => Array
                (
                    [0] => image/png
                    [1] => image/jpeg
                    [2] => image/png
                )
            [tmp_name] => Array
                (
                    [0] => /tmp/phpVQEmFd
                    [1] => /tmp/phpE5xKUf
                    [2] => /tmp/php0f4cbi
                )
            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                )
            [size] => Array
                (
                    [0] => 1088612
                    [1] => 1324555
                    [2] => 410839
                )
        ))

我的问题是如何删除formData ex:

中的条目
editor.frmData.delete('upload[1]');

editor.frmData.delete('upload["name"][1]');

提前致谢

2 个答案:

答案 0 :(得分:1)

你不能。

设置密钥有set,而且append也可以做同样的事情,而不会覆盖同名的现有密钥。

但是set在delete中有相反的情况,追加并没有相反。

唯一的方法是删除密钥,然后重写要保留的所有值。

答案 1 :(得分:-1)

您可以使用此功能删除同名的多个值中的一个:

function formDataDelete(frmData, name, index) {
    var keep = frmData.getAll(name);
    keep.splice(index, 1);
    frmData.delete(name);
    keep.forEach( value => frmData.append(name, value) );
}

它只删除名称(以及与之关联的所有值),并再次添加所有值,但指定索引处的值除外。