系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 网络编程 > AJAX相关 > 详细页面

使用ajax跨域调用springboot框架的api传输文件

时间:2020-02-03来源:系统城作者:电脑系统城

在新项目中使用的是springboot编写的api,涉及到ajax跨域请求和传输文件的问题,在这里记录一下 
首先是前台页面的代码


 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>test_api</title>
  6. <script type="text/javascript" src="jquery-1.7.2.js"></script>
  7. <script type="text/javascript">
  8. function test(){
  9. var obj = new Object;
  10. obj.name = $("#name").val();
  11. obj.age = $("#age").val();
  12. var file = document.getElementById("file").files[0];
  13. var formData = new FormData();
  14. formData.append("data",JSON.stringify(obj));
  15. formData.append("file",file);
  16. $.ajax({
  17. type:"post",
  18. url:"http://localhost:8187/test/upload",
  19. contentType:false,
  20. processData:false,
  21. data:formData,
  22. success:function(data){
  23. alert(data.msg);
  24. }
  25. });
  26. }
  27. </script>
  28. </head>
  29. <body>
  30. <div class="">
  31. <table>
  32. <tr>
  33. <td>sCompany:</td>
  34. <td><input type="text" id="name" value="tom" /></td>
  35. </tr>
  36. <tr>
  37. <td>scardtype:</td>
  38. <td><input type="text" id="age" value="23" /></td>
  39. </tr>
  40. <tr>
  41. <td>file:</td>
  42. <td><input type="file" id="file" /></td>
  43. </tr>
  44. </table>
  45. <input type="button" onclick="test();" value="提交" />
  46. </div>
  47. </body>
  48. </html>

程序入口类的代码

 


 
  1. package test;
  2.  
  3. import javax.servlet.MultipartConfigElement;
  4.  
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import org.springframework.boot.web.servlet.MultipartConfigFactory;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.web.servlet.config.annotation.CorsRegistry;
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  11. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  12.  
  13. /**
  14. * Hello world!
  15. *
  16. */
  17.  
  18. @SpringBootApplication
  19. public class App
  20. {
  21.  
  22. public static void main( String[] args )
  23. {
  24. SpringApplication.run(App.class, args);
  25. }
  26. //设置ajax跨域请求
  27. @Bean
  28. public WebMvcConfigurer corsConfigurer(){
  29. return new WebMvcConfigurerAdapter(){
  30.  
  31. @Override
  32. public void addCorsMappings(CorsRegistry registry) {
  33. registry.addMapping("/**").allowedOrigins("*");
  34. }
  35. };
  36. }
  37.  
  38. @Bean
  39. public MultipartConfigElement multipartConfigElement(){
  40. MultipartConfigFactory factory = new MultipartConfigFactory();
  41. //设置上传文件大小限制
  42. factory.setMaxFileSize("10MB");
  43. //设置上传总数据大小
  44. factory.setMaxRequestSize("15MB");
  45. return factory.createMultipartConfig();
  46. }
  47. }

api代码


 
  1. package test.controller;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import javax.servlet.http.HttpServletRequest;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestMethod;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import org.springframework.web.multipart.MultipartFile;
  14. import org.springframework.web.multipart.MultipartHttpServletRequest;
  15. import test.model.UploadInfo;
  16. import com.alibaba.fastjson.JSON;
  17. import com.alibaba.fastjson.JSONObject;
  18.  
  19. @RestController
  20. @RequestMapping("/test")
  21. public class TestController {
  22.  
  23. /**
  24. * 上传文件
  25. * @param req form请求
  26. * @return json字符串
  27. */
  28. @RequestMapping(value="/upload", method=RequestMethod.POST)
  29. public String uploadFile(HttpServletRequest req){
  30. // 返回结果用 json对象
  31. JSONObject returnObj = new JSONObject();
  32. //从请求中获取请求的json字符串
  33. String strData = req.getParameter("data");
  34. //将获取到的JSON字符串转换为Imgidx对象
  35. UploadInfo info = JSON.parseObject(strData, UploadInfo.class);
  36. //获取上传的文件集合
  37. List<MultipartFile> files = ((MultipartHttpServletRequest)req).getFiles("file");
  38. MultipartFile file = files.get(0);
  39. // 返回信息头部
  40. Map<String, String> header = new HashMap<String, String>();
  41. header.put("code", "0");
  42. header.put("msg", "success");
  43. File file1234 = new File(file.getOriginalFilename());
  44. //插入数据的影响的数据条数
  45. int result = 0;
  46. //将文件上传到save
  47. if(!file.isEmpty()){
  48. try{
  49. byte[] arr = new byte[1024];
  50. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file1234));
  51. bos.write(arr);
  52. bos.flush();
  53. bos.close();
  54. }catch(Exception e){
  55. header.put("code", "-1");
  56. header.put("msg", "errorMsg:" + e.getMessage());
  57. }
  58. }else{
  59. header.put("code", "-1");
  60. header.put("msg", "errorMsg:上传文件失败,因为文件是空的");
  61. }
  62. String returnStr = returnObj.toJSONString(header);
  63. return returnStr;
  64. }
  65. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载