EXTJS 7.2 -使用扩展字段文件上传多个文件

d4so4syb  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(186)

我正在尝试使用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 ~ 3 mb文件)
你知道为什么$_FILES数组没有显示所有提交的文件吗?
最新消息:需要注意的是--如果我在devtools中手动设置呈现页面上字段的name属性,使其在末尾包含“[]”,那么我可以获得多个文件上传到服务器。问题似乎是表单没有将文件输入视为多个上传,并使用正确的“name[]”约定,EXT会从名称字符串中删除非字母数字字符。所以我似乎无法在代码中将字段名属性设置为“files[]”。我猜我可能可以覆盖它?只是不确定如何覆盖

tv6aics1

tv6aics11#

如果你怀疑文件是否真的按照你的期望发送,我建议你试着把问题分成两个主要的问题。它们是前端(ext js)问题和后端(你的PHP脚本在接收文件)。我可以告诉你如何让我们确保前端( Sencha ext js)真的发送多个文件,或者不通过使用文件字段配置中的change的侦听器。

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
              });
           }
        }
    }

另一种方法是检查文件是以多个关键形式参数'name[]'发送还是仅以单一形式参数'name'发送(但包含多个文件),只需在您提交到后端后检查浏览器中的网络工具,它会向您显示答案。

相关问题