ajaxfileupload跨域问题解决
一、问题在现实场景中,会有很多小伙伴采用ajaxfileupload这个控件取异步上传文件,它的原理是在源码中构造一个iframe上传,如果上传组件本身就在一个iframe中,上传文件的时候,ajaxfileupload源码中又构造一个iframe,这样上传的时候就会触发浏览器的同源策略,造成跨域,就算两个iframe本身处于同一个域名下,也会存在跨域,那么怎么解决呢?二、解决方法采用FormDa
一、问题
在现实场景中,会有很多小伙伴采用ajaxfileupload这个控件取异步上传文件,它的原理是在源码中构造一个iframe上传,如果上传组件本身就在一个iframe中,上传文件的时候,ajaxfileupload源码中又构造一个iframe,这样上传的时候就会触发浏览器的同源策略,造成跨域,就算两个iframe本身处于同一个域名下,也会存在跨域,那么怎么解决呢?
二、解决方法
采用FormData上传即可解决!!!!
1、jsp页面代码:
<input id="file" type="file" hidden name="file" multiple="multiple">
<label class="blue-btn" href="javascript:" onclick="openFile();"><span class="icon-add"></span>选择文件</label>
multiple="multiple":表示可以多文件上传
2、js代码:
//打开上传文件窗口
function openFile(){
$("#file").click();
}
//上传文件
var formData = new FormData();
for (var i=0;i<$("#file")[0].files.length;i++){
formData.append("files",$("#file")[0].files[i])
}
formData.append("businessType",param.businessType);
formData.append("pkid",param.pkid);
formData.append("fileNames",param.fileNames);
formData.append("fileReNames",param.fileReNames);
$.ajax({
url : "/uploadAttachment",
type:"post",
data:formData,
//十分重要,不能省略
cache: false,
processData: false,
contentType: false,
success: function (rslt) {
if (rslt.resCode=="000000") {
alert(rslt.resCode);
}else{
layer.msg(rslt.resMsg, {icon : 2, time : 2000});
}
}
formData.append("businessType",param.businessType):上传文件的同时附带参数
3、后台代码:
@RequestMapping("/uploadAttachment")
@ResponseBody
public BasePageResponse upload(@RequestParam("files") List<MultipartFile> files, HttpServletRequest request) {
return null;
}
此处files一定要和formData.append("files",$("#file")[0].files[i])中的key一致!!
好啦,完美解决,可以抛弃ajaxfileupload.js了~~~~

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)