使用ajax跨域调用springboot框架的api传输文件
在新项目中使用的是springboot编写的api,涉及到ajax跨域请求和传输文件的问题,在这里记录一下
首先是前台页面的代码
test_api functiontest(){ varobj=newObject; obj.name=$("#name").val(); obj.age=$("#age").val(); varfile=document.getElementById("file").files[0]; varformData=newFormData(); formData.append("data",JSON.stringify(obj)); formData.append("file",file); $.ajax({ type:"post", url:"http://localhost:8187/test/upload", contentType:false, processData:false, data:formData, success:function(data){ alert(data.msg); } }); }
sCompany: scardtype: file:
程序入口类的代码
packagetest;
importjavax.servlet.MultipartConfigElement;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.boot.web.servlet.MultipartConfigFactory;
importorg.springframework.context.annotation.Bean;
importorg.springframework.web.servlet.config.annotation.CorsRegistry;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;
importorg.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
*Helloworld!
*
*/
@SpringBootApplication
publicclassApp
{
publicstaticvoidmain(String[]args)
{
SpringApplication.run(App.class,args);
}
//设置ajax跨域请求
@Bean
publicWebMvcConfigurercorsConfigurer(){
returnnewWebMvcConfigurerAdapter(){
@Override
publicvoidaddCorsMappings(CorsRegistryregistry){
registry.addMapping("/**").allowedOrigins("*");
}
};
}
@Bean
publicMultipartConfigElementmultipartConfigElement(){
MultipartConfigFactoryfactory=newMultipartConfigFactory();
//设置上传文件大小限制
factory.setMaxFileSize("10MB");
//设置上传总数据大小
factory.setMaxRequestSize("15MB");
returnfactory.createMultipartConfig();
}
}
api代码
packagetest.controller;
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjavax.servlet.http.HttpServletRequest;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.RestController;
importorg.springframework.web.multipart.MultipartFile;
importorg.springframework.web.multipart.MultipartHttpServletRequest;
importtest.model.UploadInfo;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONObject;
@RestController
@RequestMapping("/test")
publicclassTestController{
/**
*上传文件
*@paramreqform请求
*@returnjson字符串
*/
@RequestMapping(value="/upload",method=RequestMethod.POST)
publicStringuploadFile(HttpServletRequestreq){
//返回结果用json对象
JSONObjectreturnObj=newJSONObject();
//从请求中获取请求的json字符串
StringstrData=req.getParameter("data");
//将获取到的JSON字符串转换为Imgidx对象
UploadInfoinfo=JSON.parseObject(strData,UploadInfo.class);
//获取上传的文件集合
Listfiles=((MultipartHttpServletRequest)req).getFiles("file");
MultipartFilefile=files.get(0);
//返回信息头部
Mapheader=newHashMap();
header.put("code","0");
header.put("msg","success");
Filefile1234=newFile(file.getOriginalFilename());
//插入数据的影响的数据条数
intresult=0;
//将文件上传到save
if(!file.isEmpty()){
try{
byte[]arr=newbyte[1024];
BufferedOutputStreambos=newBufferedOutputStream(newFileOutputStream(file1234));
bos.write(arr);
bos.flush();
bos.close();
}catch(Exceptione){
header.put("code","-1");
header.put("msg","errorMsg:"+e.getMessage());
}
}else{
header.put("code","-1");
header.put("msg","errorMsg:上传文件失败,因为文件是空的");
}
StringreturnStr=returnObj.toJSONString(header);
returnreturnStr;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。