我正在尝试使用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);
};
答案 0 :(得分:1)
处理文件上传请求的方法应标记为formHandler
服务器端提供的Ext.Direct API。
编辑:您正在使用App.api.RemoteModel.Site_Supplicant_readCSV
方法上传文件;此方法必须是formHandler
。
我对Node.js堆栈不是很熟悉,但是查看this example表示您可能需要在服务器端的函数声明中添加/*formHandler*/
描述符。