【发布时间】: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);
};
【问题讨论】: