extjs6.5文件上传_ExtJS 6.7不能跨域上传文件的bug

因为要使用表单实现跨域上传文件,但是发现在6.7居然不行,需要自己手动去创建FormData对象来提交,这比较奇怪。经过分析源代码,终于找到了这个bug,主要代码如下:

...

if (Ext.feature.has.XHR2 && request.xhr2) {

delete request.form;

var formData = request.data = new FormData(form);

if (request.params) {

Ext.iterate(request.params, function(name, value) {

if (Ext.isArray(value)) {

Ext.each(value, function(v) {

formData.append(name, v);

});

} else {

formData.append(name, value);

}

});

delete request.params;

}

}

return Ext.Ajax.request(request);

以上代码是Ext.form.Panel的beforeAjaxSubmit代码片段,主要错误是在创建FormData的时候把值赋值给了data属性,而不是rawData属性,这导致了在Ext.Ajax的setOptions方法中把表单值都忽略了,从而什么也没提交。

通过重写Ext.form.Panel的beforeAjaxSubmit方法,就可使用以下代码轻松的跨域上传文件了:

view.submit({

xhr2:true,

headers:{

"Content-Type": null

},

method: 'POST',

submitEmptyText: false,

url: URI.get(CFG.organizationUnit.id === 1 ? 'shareProduct': 'product', 'import'),

success: me.onSubmitSuccess,

failure: me.onSubmitFailure,

scope: me

});

代码中,xhr2是必须的,从刚才的代码也可以看到,只有当该值为true的时候,才会使用FormData对象来提交数据,而这是使用Ajax来上传文件的常用方式。另外一个要注意的地方就是要将Content-Type设置为null,以便自动生成正确的Content-Type,不然提交也不会成功。

作者:上将军

原文:https://blog.csdn.net/tianxiaode/article/details/89201660

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值