使用ajax跨域調(diào)用springboot框架的api傳輸文件
在新項(xiàng)目中使用的是springboot編寫的api,涉及到ajax跨域請(qǐng)求和傳輸文件的問(wèn)題,在這里記錄一下
首先是前臺(tái)頁(yè)面的代碼
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>test_api</title> <script type="text/javascript" src="jquery-1.7.2.js"></script> <script type="text/javascript"> function test(){ var obj = new Object; obj.name = $("#name").val(); obj.age = $("#age").val(); var file = document.getElementById("file").files[0]; var formData = new FormData(); 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); } }); } </script> </head> <body> <div class=""> <table> <tr> <td>sCompany:</td> <td><input type="text" id="name" value="tom" /></td> </tr> <tr> <td>scardtype:</td> <td><input type="text" id="age" value="23" /></td> </tr> <tr> <td>file:</td> <td><input type="file" id="file" /></td> </tr> </table> <input type="button" onclick="test();" value="提交" /> </div> </body> </html>
程序入口類的代碼
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; /** * Hello world! * */ @SpringBootApplication public class App { public static void main( String[] args ) { SpringApplication.run(App.class, args); } //設(shè)置ajax跨域請(qǐng)求 @Bean public WebMvcConfigurer corsConfigurer(){ return new WebMvcConfigurerAdapter(){ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**").allowedOrigins("*"); } }; } @Bean public MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory = new MultipartConfigFactory(); //設(shè)置上傳文件大小限制 factory.setMaxFileSize("10MB"); //設(shè)置上傳總數(shù)據(jù)大小 factory.setMaxRequestSize("15MB"); return factory.createMultipartConfig(); } }
api代碼
package test.controller; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import test.model.UploadInfo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @RestController @RequestMapping("/test") public class TestController { /** * 上傳文件 * @param req form請(qǐng)求 * @return json字符串 */ @RequestMapping(value="/upload", method=RequestMethod.POST) public String uploadFile(HttpServletRequest req){ // 返回結(jié)果用 json對(duì)象 JSONObject returnObj = new JSONObject(); //從請(qǐng)求中獲取請(qǐng)求的json字符串 String strData = req.getParameter("data"); //將獲取到的JSON字符串轉(zhuǎn)換為Imgidx對(duì)象 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()); //插入數(shù)據(jù)的影響的數(shù)據(jù)條數(shù) 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:上傳文件失敗,因?yàn)槲募强盏?); } String returnStr = returnObj.toJSONString(header); return returnStr; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringBoot+thymeleaf+ajax實(shí)現(xiàn)局部刷新詳情
- AJAX?SpringBoot?前后端數(shù)據(jù)交互的項(xiàng)目實(shí)現(xiàn)
- SpringBoot結(jié)合Ajax實(shí)現(xiàn)登錄頁(yè)面實(shí)例
- Springboot解決ajax+自定義headers的跨域請(qǐng)求問(wèn)題
- SpringBoot解決ajax跨域問(wèn)題的方法
- jquery+ajaxform+springboot控件實(shí)現(xiàn)數(shù)據(jù)更新功能
- SpringBoot+SpringSecurity處理Ajax登錄請(qǐng)求問(wèn)題(推薦)
- ajax實(shí)時(shí)監(jiān)測(cè)與springboot的實(shí)例分析
相關(guān)文章
一款經(jīng)典的ajax登錄頁(yè)面 后臺(tái)asp.net
眾所周知,用服務(wù)器控件做頁(yè)面的登錄窗體時(shí)很簡(jiǎn)單的,但是頁(yè)面的多次回傳讓我們感覺(jué)到頭痛,一直刷新頁(yè)面的感覺(jué)非常之不好,其實(shí)用ajax的局部刷新功能可以完全解決這個(gè)問(wèn)題,制作出來(lái)的頁(yè)面有很好的交互性,而且是局部刷新,節(jié)省網(wǎng)絡(luò)資源。2009-10-10ajax設(shè)置async校驗(yàn)用戶名是否存在的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇ajax設(shè)置async校驗(yàn)用戶名是否存在的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08AJAX實(shí)現(xiàn)仿Google Suggest效果
AJAX實(shí)現(xiàn)仿Google Suggest效果...2007-07-07用 ajax 的方法解決網(wǎng)頁(yè)廣告顯示的問(wèn)題
用 ajax 的方法解決網(wǎng)頁(yè)廣告顯示的問(wèn)題...2006-12-12javascript Ajax獲取遠(yuǎn)程url的返回判斷
將以下文本放入一個(gè)HTML頁(yè)面即可看到效果,將會(huì)有兩次彈出提示,最后在頁(yè)面上顯示YES,表示完成2012-01-01ajax中的async屬性值之同步和異步及同步和異步區(qū)別
在Jquery中ajax方法中async用于控制同步和異步,當(dāng)async值為true時(shí)是異步請(qǐng)求,當(dāng)async值為fase時(shí)是同步請(qǐng)求。ajax中async這個(gè)屬性,用于控制請(qǐng)求數(shù)據(jù)的方式,默認(rèn)是true,即默認(rèn)以異步的方式請(qǐng)求數(shù)據(jù)。2015-10-10js實(shí)現(xiàn)ajax分頁(yè)完整實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)ajax分頁(yè),以完整實(shí)例形式詳細(xì)分析了ajax分頁(yè)的具體步驟與實(shí)現(xiàn)技巧,代碼備有詳盡的注釋便于理解,需要的朋友可以參考下2016-04-04如何將ajax請(qǐng)求返回的Json格式數(shù)據(jù)循環(huán)輸出成table形式
ajax請(qǐng)求返回Json格式數(shù)據(jù),在網(wǎng)上有很多的處理方法,本文教大家如何循環(huán)輸出成table形式,代碼很詳細(xì),感興趣的朋友可以參考下2013-10-10