Ext.Direct文件上传 - 表单提交类型application / json

时间:2014-08-27 19:47:50

标签: forms extjs submit

我正在尝试使用Ext.Direct通过表单提交上传文件,但是Ext.direct正在发送我的请求作为类型' application / json'而不是' multipart / form-data'

这是我的表格。

 {
        xtype: 'form',
        api: {
            submit: 'App.api.RemoteModel.Site_Supplicant_readCSV'
        },
        items: [
            {
                xtype: 'filefield',
                buttonOnly: false,
                allowBlank: true,
                buttonText: 'Import CSV'
            }
        ],
        buttons:
        [
            {
                text: 'Upload',
                handler: function(){
                    var form = this.up('form').getForm();
                    if(form.isValid()){
                        form.submit({
                            waitMsg: 'Uploading...',
                            success: function(form, action){
                                console.log(action.result);
                            }
                        });
                    }
                }
            }
        ]
    },

在HTTP请求中,它会检查请求选项是否为表单上载。

if (me.isFormUpload(options)) {

来到这里

isFormUpload: function(options) {
    var form = this.getForm(options);       
    if (form) {
        return (options.isUpload || (/multipart\/form-data/i).test(form.getAttribute('enctype')));
    }
    return false;
},

getForm: function(options) {
    var form = options.form || null;
    if (form) {
        form = Ext.getDom(form);
    }
    return form;
},

但是,选项看起来像这样

{
callback: function (options, success, response) {
jsonData: Object
    action: "RemoteModel"
    data: Array[1]
        0: form
        length: 1
         __proto__: Array[0]
        method: "Site_Supplicant_readCSV"
        tid: 36
        type: "rpc"
    __proto__: Object
scope: constructor
timeout: undefined
transaction: constructor
}

并且没有直接的表单配置,但它存在于jsonData.data [0]中。所以它没有将它设置为类型multipart / form-data,它作为类型application / json被发送出去。 我究竟做错了什么?为什么表格没有正确提交?

编辑 - 我看到很多关于' formHandler'配置Ext.Direct?我被引导假设这个配置可以解决我的问题。但是,我不知道这应该存在的地方。如果我能找到解决方案,我会更新我的帖子。

解决方案 - 只需将/ formHandler /添加到params的末尾即可设置标志并解决了我的问题。百思不得其解。

Supplicant.prototype.readCSV = function(params,callback, request, response,   sessionID/*formHandler*/)
{
    var files = request.files;
    console.log(files);
};

1 个答案:

答案 0 :(得分:1)

处理文件上传请求的方法应标记为formHandler 服务器端提供的Ext.Direct API。

编辑:您正在使用App.api.RemoteModel.Site_Supplicant_readCSV方法上传文件;此方法必须是formHandler

我对Node.js堆栈不是很熟悉,但是查看this example表示您可能需要在服务器端的函数声明中添加/*formHandler*/描述符。