0

我正在尝试使用 7.2.0 Modern File Field 上传多个文件。

var txtSiteCode = Ext.create('Ext.field.Text', {
        label: 'Site Code',
        required: true,
        name: 'site_code',
        responsiveConfig: {
            'width < 800': {
                labelAlign: 'top'
            },
            'width >= 800': {
                labelAlign: 'left'
            }
        }
                })
            }
        }
    }),  fldFile = Ext.create('Ext.field.File', {
        label: 'Images',
        name: 'files',
        multiple: true,
        accept: 'image',
        responsiveConfig: {
            'width < 800': {
                labelAlign: 'top'
            },
            'width >= 800': {
                labelAlign: 'left'
            }
        },
    }), form = Ext.create('Ext.form.Panel', {
        url: 'data/test.php',
        method: 'post',
        enctype: 'multipart/form-data',
        items : [txtSiteCode, fldFile],
    })

提交表单后,我在服务器上的 $_FILES 数组中只收到 1 个文件。但是从请求有效负载的大小来看,似乎所有文件实际上都应该可用。

FILE COUNT: 1, referer:
[Thu Aug 20 09:05:09.715473 2020] [php7:notice] [pid 12749] Array\n(\n    [name] => FBK90084_Primary_14_PE4 (2).jpg\n    [type] => image/jpeg\n    [tmp_name] => /tmp/phpxjd0pK\n    [error] => 0\n    [size] => 2973487\n)\n, 

以上是对 $_FILE 数组大小的计数,以及 $_FILE 数组本身的转储。这是在文件选择器中选择了 3 个 jpg 文件的结果。

Status200
OK
VersionHTTP/1.1
Transferred5.67 MB (0 B size)
Referrer Policyno-referrer-when-downgrade

上面是服务器响应,您可以看到大小为 5.7mb(在这种情况下选择了 2 ~3mb 个文件)

知道为什么 $_FILES 数组没有显示所有提交的文件吗?

更新:需要注意的是 - 如果我在 devtools 中手动设置渲染页面上字段的名称属性以在其末尾包含“[]”,我可以获得多个文件上传到服务器。然后问题似乎是表单没有将文件输入视为多次上传并使用正确的“名称 []”约定,并且 EXT 从名称字符串中去除非字母数字字符,因此我似乎无法设置字段名称属性到代码中的“文件[]”。我猜我可能可以覆盖这个?只是不确定如何

4

1 回答 1

0

如果您怀疑文件是否真的按照您的预期发送,我建议您尝试将问题分离为两个主要问题。它们是前端(ext js)问题和后端(接收文件的 PHP 脚本)。我可以向您展示如何通过在文件字段配置中使用更改的侦听器来确保前端(sencha ext js)确实发送多个文件。

Ext.create('Ext.field.File', {
        label: 'Images',
        name: 'files',
        multiple: true,
        accept: 'image',
        responsiveConfig: {
            'width < 800': {
                labelAlign: 'top'
            },
            'width >= 800': {
                labelAlign: 'left'
            }
        },
        listeners:{
           change: function(el,v){
              let files = el.getFiles(); //get all files
              files.forEach(file=>{
                 console.log(file); //check your console, you will be shown the object of a file
              });
           }
        }
    }

另一种检查文件是以多个关键形式参数作为“名称[]”还是仅以单个形式参数作为“名称”(但包含多个文件)发送的另一种方法,只需在提交到后端后检查浏览器中的网络工具,它会告诉你答案。

于 2020-10-24T05:32:29.563 回答