ExtJS文件上传问题

时间:2012-10-18 16:23:21

标签: javascript extjs file-upload extjs4

ExtJS版本:4.1.0

已回答 - 请参阅下面的回复......非常愚蠢

我有一个包含几个字段的简单表单,其中一个是xtype fileuploadfield。我在Controller click方法中的表单的保存按钮上监听this.control事件。当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以及我在字段中输入的文件的路径(即C:\ fakepath \ somefile.png)。我还可以执行form.getField('upload-field-id');来获取上传字段元素。方法form.hasUpload()返回TRUE

踢球者是当我在服务器上调用form.submit()var_dump() $_FILES数组时,它是空的!

在我在ExtJS中看到的文件上传示例中,表单提交通过视图中“保存”按钮上的handler函数进行。由于我喜欢在控制器中保持处理按钮按下的逻辑,我希望这不是我唯一的选择!

非常感谢任何意见,谢谢您的时间。

2 个答案:

答案 0 :(得分:0)

这肯定是服务器方面的问题。 ExtJS利用隐藏组件将多部分表单提交给服务器。这确实如指南,示例和文档中所述。

我不熟悉您在上面提到的var转储功能,但您需要确保您的服务器端组件正确处理多部分表单提交。

答案 1 :(得分:0)

我觉得有点傻,但问题与从传递给我的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)
  }
}

服务器已成功收到文件上传!