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

上一篇: ExtJS File Upload Woes

下一篇: Namespaces in plugin like app