使用ajax跨域调用springboot框架的api传输文件(ajax跨域请求cors)这都可以?

随心笔谈2年前发布 admin
192 0 0

文章摘要

这篇文章主要介绍了使用Spring Boot框架开发的一个文件上传服务。代码中定义了支持文件上传的`@SpringBootApplication`类`App`,并在`main`方法中使用`Spring Boot`的运行时类启动服务。文章重点描述了如何配置 CORS(跨域资源访问)以允许客户端请求上传文件,具体配置了默认映射`"http://localhost:8080/upload"`。此外,代码还展示了文件上传逻辑,包括接收上传文件、写入本地存储以及处理上传失败的情况。通过@Predefined注解配置了默认的 CORS 映射,实现了服务器与客户端之间的通信。文章还使用`@Bean`注解定义了`corsConfigurer`Bean,返回了`WebMvcConfigurerAdapter`,该类实现了`addCorsMappings`方法,允许所有方法默认跨域,除了特定的路径。


package test;

import javax.servlet.MultipartConfigElement;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
public class App
{

public static void main( String[] args )
{
SpringApplication.run(App.class, args);
}
//设置ajax跨域请求
@Bean
public WebMvcConfigurer corsConfigurer(){
return new WebMvcConfigurerAdapter(){

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping(”
@RequestMapping(value=”/upload”, method=RequestMethod.POST)
public String uploadFile(HttpServletRequest req){
// 返回结果用 json对象
JSONObject returnObj=new JSONObject();
//从请求中获取请求的json字符串
String strData=req.getParameter(“data”);
//将获取到的JSON字符串转换为Imgidx对象
UploadInfo info=JSON.parseObject(strData, UploadInfo.class);
//获取上传的文件集合
List<MultipartFile> files=((MultipartHttpServletRequest)req).getFiles(“file”);
MultipartFile file=files.get(0);
// 返回信息头部
Map<String, String> header=new HashMap<String, String>();
header.put(“code”, “0”);
header.put(“msg”, “success”);
File file1234=new File(file.getOriginalFilename());
//插入数据的影响的数据条数
int result=0;
//将文件上传到save
if(!file.isEmpty()){
try{
byte[] arr=new byte[1024];
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(file1234));
bos.write(arr);
bos.flush();
bos.close();
}catch(Exception e){
header.put(“code”, “-1”);
header.put(“msg”, “errorMsg:” + e.getMessage());
}
}else{
header.put(“code”, “-1”);
header.put(“msg”, “errorMsg:上传文件失败,因为文件是空的”);
}
String returnStr=returnObj.toJSONString(header);
return returnStr;
}
}

© 版权声明

相关文章