ExtJS 4.2 filefield 多重上传
ExtJS 4.2 filefield multiple upload
我在上传多文件时遇到了一些问题
在我的控制器中,我生成了一个带有表单的 window,该表单有一个文件字段和一个网格:
var ventanaSubirDocumento=new Ext.Window({
title: '<span style="color:#C85E00;">Subida de Documento</span>',
plain: true,
modal: true,
frame: true,
border: false,
resizable: false,
draggable: false,
scope:this,
items:[
{
xtype:'form',
width: 400,
bodyPadding: 10,
frame: true,
timeout:600000,//Por si pesa mucho el archivo
renderTo: Ext.getBody(),
items: [{
xtype: 'filefield',
name: '',
fieldLabel: '',
fieldStyle:'color:black',
labelWidth: '',
msgTarget: 'side',
allowBlank: false,
anchor: '100%',
buttonText: 'Seleccionar documento',
listeners: {
change: function(fld, value) {
//var newValue = value.replace(/C:\fakepath\/g, '');
//fld.setRawValue(newValue);
var upload = fld.fileInputEl.dom;
var files = upload.files;
var names = [];
var names2 = [];
if (files) {
for (var i = 0; i < files.length; i++){
names.push(files[i].name);
names2.push({archivo:files[i].name})
value = names.join(', ');
}
}
gridDocumentos.getStore().loadData(names2);
fld.setRawValue(value);
},
/*render:function(field, eOpts){
field.fileInputEl.set({ multiple: true });
}*/
afterrender:function(cmp){
cmp.fileInputEl.set({
multiple:'multiple'
});
}
}
},
gridDocumentos
],
buttons: [{
text: 'Subir documento',
handler: function() {
var form = this.up('form').getForm();
if(form.isValid()){
form.submit({
url: 'data/php/Tmc_SubirDocumento.php',
waitMsg: 'Subiendo documento...',
success: function(fp, o) {
ventanaSubirDocumento.close();
Ext.Msg.show({
title: 'Subida de documento',
msg: 'Documento subido',
icon: Ext.MessageBox.INFO,
buttons: Ext.Msg.OK
});
}
}
}
}]
]
}).show();
在控制器中一切正常,如果我 select 1,2,3,etc... 上传的文件用它的名字填充网格。
当我提交表单并执行 PHP 来处理 selected 文件时,问题就来了,在 php 中,如果我打印 $_FILES 变量,我只会得到最后 selected.
在我的 php 中 请求负载 我看到了三个文件,但是 $_FILES 只有最后一个:
------WebKitFormBoundaryJhIv2MXqKkzPnNys
Content-Disposition:表单数据;名字="filefield-1459-inputEl";文件名="file1.doc"
内容类型:application/msword
------WebKitFormBoundaryJhIv2MXqKkzPnNys
Content-Disposition:表单数据;名字="filefield-1459-inputEl";文件名="file2.docx"
内容类型:application/vnd.openxmlformats-officedocument.wordprocessingml.document
------WebKitFormBoundaryJhIv2MXqKkzPnNys
Content-Disposition:表单数据;名字="filefield-1459-inputEl";文件名="file3.docx"
内容类型:application/vnd.openxmlformats-officedocument.wordprocessingml.document
我是不是遗漏了什么?如何在提交 php 文件后检索所有文件?
您可以命名您的文件字段,因此它会将名称属性添加到基础 html 输入。
...
xtype: 'filefield',
name: 'uploads[]',
fieldLabel: '',
...
然后您可以在 PHP 上使用;
$_FILES["uploads"];
我在上传多文件时遇到了一些问题
在我的控制器中,我生成了一个带有表单的 window,该表单有一个文件字段和一个网格:
var ventanaSubirDocumento=new Ext.Window({
title: '<span style="color:#C85E00;">Subida de Documento</span>',
plain: true,
modal: true,
frame: true,
border: false,
resizable: false,
draggable: false,
scope:this,
items:[
{
xtype:'form',
width: 400,
bodyPadding: 10,
frame: true,
timeout:600000,//Por si pesa mucho el archivo
renderTo: Ext.getBody(),
items: [{
xtype: 'filefield',
name: '',
fieldLabel: '',
fieldStyle:'color:black',
labelWidth: '',
msgTarget: 'side',
allowBlank: false,
anchor: '100%',
buttonText: 'Seleccionar documento',
listeners: {
change: function(fld, value) {
//var newValue = value.replace(/C:\fakepath\/g, '');
//fld.setRawValue(newValue);
var upload = fld.fileInputEl.dom;
var files = upload.files;
var names = [];
var names2 = [];
if (files) {
for (var i = 0; i < files.length; i++){
names.push(files[i].name);
names2.push({archivo:files[i].name})
value = names.join(', ');
}
}
gridDocumentos.getStore().loadData(names2);
fld.setRawValue(value);
},
/*render:function(field, eOpts){
field.fileInputEl.set({ multiple: true });
}*/
afterrender:function(cmp){
cmp.fileInputEl.set({
multiple:'multiple'
});
}
}
},
gridDocumentos
],
buttons: [{
text: 'Subir documento',
handler: function() {
var form = this.up('form').getForm();
if(form.isValid()){
form.submit({
url: 'data/php/Tmc_SubirDocumento.php',
waitMsg: 'Subiendo documento...',
success: function(fp, o) {
ventanaSubirDocumento.close();
Ext.Msg.show({
title: 'Subida de documento',
msg: 'Documento subido',
icon: Ext.MessageBox.INFO,
buttons: Ext.Msg.OK
});
}
}
}
}]
]
}).show();
在控制器中一切正常,如果我 select 1,2,3,etc... 上传的文件用它的名字填充网格。
当我提交表单并执行 PHP 来处理 selected 文件时,问题就来了,在 php 中,如果我打印 $_FILES 变量,我只会得到最后 selected.
在我的 php 中 请求负载 我看到了三个文件,但是 $_FILES 只有最后一个:
------WebKitFormBoundaryJhIv2MXqKkzPnNys Content-Disposition:表单数据;名字="filefield-1459-inputEl";文件名="file1.doc" 内容类型:application/msword
------WebKitFormBoundaryJhIv2MXqKkzPnNys Content-Disposition:表单数据;名字="filefield-1459-inputEl";文件名="file2.docx" 内容类型:application/vnd.openxmlformats-officedocument.wordprocessingml.document
------WebKitFormBoundaryJhIv2MXqKkzPnNys Content-Disposition:表单数据;名字="filefield-1459-inputEl";文件名="file3.docx" 内容类型:application/vnd.openxmlformats-officedocument.wordprocessingml.document
我是不是遗漏了什么?如何在提交 php 文件后检索所有文件?
您可以命名您的文件字段,因此它会将名称属性添加到基础 html 输入。
...
xtype: 'filefield',
name: 'uploads[]',
fieldLabel: '',
...
然后您可以在 PHP 上使用;
$_FILES["uploads"];