【问题标题】:Ext.Direct File Upload - Form submit of type application/jsonExt.Direct 文件上传 - application/json 类型的表单提交
【发布时间】:2014-08-28 23:11:43
【问题描述】:

我正在尝试使用 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
}

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

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

解决方案 - 只需在参数末尾添加 /formHandler/ 即可设置标志并解决我的问题。莫名其妙。

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

【问题讨论】:

    标签: forms extjs submit


    【解决方案1】:

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

    编辑:您正在使用App.api.RemoteModel.Site_Supplicant_readCSV 方法上传文件;这个方法需要是formHandler

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

    【讨论】:

    • 我正在使用 Nodejs。 formHandler 会进入 Supplicant 模型吗?
    • 我很困惑为什么在参数末尾添加描述符是解决方案......但它确实有效。我想我需要对此事进行更多研究。
    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 2019-03-22
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多