在使用spring boot做上传文件的功能, 前端使用的jquery 配合ajax去提交,后台使用springmvc mulitpartFile 去接受文件,发现文件一直获取不到,一直为null,尝试了各种前端解决方法,后台加了@requestparam, @requestbody 等都还是无法获取到文件,在各种尝试后,决定关掉过滤器,发现接受到了,我的过滤器里面过滤了*.do 这种路径请求,难道也会过滤文件?
现在还是个疑惑。。 于是尝试不关掉过滤器也能上传文件,多次尝试后,加了一个配置 就可以了,这个用的第三方的文件解析器, 记录一次爬坑经历
前端代码:
<form id="fileUploadForm" enctype="multipart/form-data" method="post" οnsubmit="return false"> <input id ="img" type="file" name="img"/><br/><br/> <input type="submit" value="Submit" id="btnSubmit" οnclick="test1()"/> </form>
function test1() { var form = new FormData(document.getElementById("fileUploadForm")); $.ajax({ type: "POST", url:"/api/v1/testFile.do", data:form, processData: false, contentType: false, success: function (data) { alert("success"); } }) }
后端代码:
@RestController public class TestFileController { private Logger log = LoggerFactory.getLogger(TestFileController.class); @PostMapping("/api/v1/testFile") public JsonData uploadFile( @RequestParam("img") MultipartFile img) { log.info("username-->" + "-" + img.getOriginalFilename()); return JsonData.buildSuccess(); } }
springboot新增配置:
@Configuration public class UploadConfig { //显示声明CommonsMultipartResolver为mutipartResolver @Bean(name = "multipartResolver") public MultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setResolveLazily(true); resolver.setMaxInMemorySize(40960); //上传文件大小 5M 5*1024*1024 resolver.setMaxUploadSize(5 * 1024 * 1024); return resolver; } }