使用extjs5上传具有自定义请求结构的文件

时间:2015-02-13 13:00:37

标签: file-upload request customization extjs5

我想使用针对服务器的自定义请求上传extjs5表单数据(包含要上载的文件!)。这是服务器所期望的:

{
   "method"    : <method name>,
   "use_json"  : <true|false>,
   "data"      : { <parameters in JSON format> }
}

e.g.

{ 
   "method"    : "foo", 
   "use_json"  : "1",
   "data"      : { 
       "param1": "bar", 
       "file"  : "myFile" 
   }
}

我使用的表单面板包含&#34; fileUpload:true,&#34;以及&#34; fileuploadfield&#34;领域。一旦用户点击提交按钮,就会触发一个事件,由主控制器挑选,然后通过以下方法处理:

sendRequest: function(sender,parameters) {

    var serverMethod = parameters.method;
    var formData     = parameters.form.getForm().getFieldValues();

    var requestData = {
        'method'    : serverMethod,
        'use_json'  : "1",
        'data'      : formData
    }; 

    Ext.Ajax.request({
        'url'     : '../../cgi-bin/cmd.cgi',
        'method'  : 'POST',
        'jsonData': requestData,
        'waitMsg' : 'Sending request...',
        'headers' : {'Content-Type':'multipart/form-data; charset=UTF-8'},
        });

} //endfunction sendRequest

我收到服务器错误500说明&#34;格式错误的多部分POST:数据被截断&#34;表示请求未正确发送到服务器。请求标题显示的内容证实了这一点 - 显然它仍然使用&#39; XMLHttpRequest&#39;虽然它不应该(根据extjs文档):

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language de,en-US;q=0.7,en;q=0.3
Content-Length  161
Content-Type    multipart/form-data; charset=UTF-8
Cookie  CGISESSID=9eadc8cb28eac7cc02b0a4b5895e0b41
Host    localhost:8080
Referer ...
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
X-Requested-With    XMLHttpRequest

所以,我的问题是:我需要做些什么来使extjs使用非标准的文件上传请求和我的自定义数据结构?

1 个答案:

答案 0 :(得分:1)

您无法通过Ajax上传文件,这就是Ext在上传时使用隐藏表单和iframe的原因。

了解文档中描述的File Upload进程如何。