ExtJS文件上传Woes
ExtJS版本:4.1.0
回答 - 见下面我的回答...真的很愚蠢
我有一个带有几个字段的简单表单,其中一个是xtype fileuploadfield
。 我在控制器的this.control
方法中侦听窗体保存按钮上的click
事件。 当发生click
事件时,我运行一个saveForm
方法,它看起来像这样:
saveForm: function(button) {
/** Get the Window Object and retrieve the Form*/
var currentWin = button.up('window'),
form = currentWin.down('form');
/** Get the Form Object */
form = form.getForm();
/** ...continued... */
}
在我的方法这一点上,我可以console.log
表单对象,考察对象的_fields
看看我fileuploadfield
和文件I输入的在该领域的路径(即C: fakepath somefile.png)。 我也可以执行form.getField('upload-field-id');
获取上传字段元素。 form.hasUpload()
方法返回TRUE
。
踢球者是当我在我的服务器上调用form.submit()
和var_dump()
$_FILES
数组时,它是空的!
在我看到的ExtJS文件上传的例子中,表单提交是通过视图中保存按钮上的handler
函数发生的。 由于我喜欢在控制器中保存处理按钮的逻辑,所以我希望这不是我唯一的选择!
任何意见将不胜感激,谢谢你的时间。
我感觉有点傻,但问题是从传递给我的saveForm
方法的按钮检索表单对象。
更正:
在我的ExtJS控制器中...
saveForm: function(button)
{
var currentWindow = button.up('window');
/** var form = button.down('form').getForm(); **INCORRECT** */
var form = button.up('form').getForm(); /** this is correct */
form.submit({
url : '/service/form/upload/format/json',
waitMsg : 'Uploading....',
success : function(form,o) {
alert(o.response.responseText);
},
failure: function(form, action)
{
console.error('form, action', form,action);
alert('failure');
}
});
}
在我的后端(Zend),我的控制器操作很简单:
public function uploadAction()
{
var_dump($_FILES);
this->view->success = false;
}
正如所料,我的Chrome Inspector在点击保存按钮后输出以下内容:
Uncaught Ext.JSON.decode(): You're trying to decode an invalid JSON String:
{"success":false}array(1) {
["file-upload-field"]=>
array(5) {
["name"]=>
string(29) "TestImage.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(14) "/tmp/php7XfeLD"
["error"]=>
int(0)
["size"]=>
int(89799)
}
}
服务器已成功接收文件上传!
这当然是服务器端问题。 ExtJS利用隐藏的组件将多部分表单提交给服务器。 这确实按照指南,示例和文档中的描述工作。
我不熟悉上面提到的var转储函数,但您需要确保您的服务器端组件正确处理多部分表单提交。
链接地址: http://www.djcxy.com/p/76393.html