EXTJS 7.2-使用Ext.field.File上传多个文件



我正试图使用7.2.0现代文件字段上传多个文件。

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] Arrayn(n    [name] => FBK90084_Primary_14_PE4 (2).jpgn    [type] => image/jpegn    [tmp_name] => /tmp/phpxjd0pKn    [error] => 0n    [size] => 2973487n)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中手动设置渲染页面上字段的名称属性,使其末尾包含"[]",我可以获得多个文件上传到服务器。问题似乎是表单没有将文件输入视为多次上载并使用正确的"name[]"约定,并且EXT从名称字符串中删除了非字母数字字符,因此我似乎无法在代码中将字段名称属性设置为"files[]"。我想我可能可以推翻这一点?只是不确定

如果您怀疑文件是否真的按预期发送,我建议您尝试将问题分为两个主要问题。它们是前端(ext-js(问题和后端(接收文件时的PHP脚本(。我可以向您展示如何通过在filefieldconfig中使用change的监听器来确保前端(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
});
}
}
}

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

相关内容

最新更新