在使用spring boot做上传文件的功能, 前端使用的jquery 配合ajax去提交,后台使用springmvc mulitpartFile 去接受文件,发现文件一直获取不到,一直为null,尝试了各种前端解决方法,后台加了@requestparam, @requestbody 等都还是无法获取到文件,在各种尝试后,决定关掉过滤器,发现接受到了,我的过滤器里面过滤了*.do 这种路径请求,难道也会过滤文件?
现在还是个疑惑。。 于是尝试不关掉过滤器也能上传文件,多次尝试后,加了一个配置 就可以了,这个用的第三方的文件解析器, 记录一次爬坑经历
前端代码:
<form id="fileUploadForm" enctype="multipart/form-data" method="post" onsubmit="return false">
<input id ="img" type="file" name="img"/><br/><br/>
<input type="submit" value="Submit" id="btnSubmit" onclick="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;
}
}
本文介绍了解决Spring Boot应用中文件上传失败的问题。通过调整前端jQuery AJAX设置及后端配置,最终实现了文件的有效上传,并记录了整个调试过程。
6151

被折叠的 条评论
为什么被折叠?



