目的:前端通过input标签选择文件,并进行上传,后台接收该文件并进行相关处理
前端:
<form action="http://127.0.0.1:8090/facesearch" method="post" enctype="multipart/form-data">
<input id="facepic" name="selectedpic" type="file" accept="image/*">
<input type="submit" value="Submit">
</form>
后端:
@RequestMapping(value="/facesearch",method=RequestMethod.POST)
public String startFaceSearch(@RequestParam("selectedpic") MultipartFile file) throws Exception
{
FileUtils.copyInputStreamToFile(file.getInputStream(),new File("d:\\temp\\file\\",file.getOriginalFilename()));
String selectedPic="d:\\temp\\file\\"+file.getOriginalFilename();
return selectedPic;
}
将前端通过form提交的文件保存到本地d:\\temp\\file\\目录下,名字命名为原文件名file.getOriginalFilename()
遇到问题:
1:The current request is not a multipart request
- from中涉及到图片上传的就要用post提交方式。否则就会报这个错误。
- 第一中:在jsp页面的<head></head>标签里面加上<meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8" />,用ajax提交的时候如果没有在页面设置<meta http-equiv="Content-Type" content="multipart/form-data; charset=utf-8" />这个也会报这个错误。
- 第二种:在from表单的属性设置里面加上enctype="multipart/form-data",上次我遇到问题就是通过这种方式解决
2 maximum upload size exceeded
SpringBoot做文件上传时出现了The field file exceeds its maximum permitted size of 1048576 bytes.错误,显示文件的大小超出了允许的范围。查看了官方文档,原来Spring Boot工程嵌入的tomcat限制了请求的文件大小,这一点在Spring Boot的官方文档中有说明,文档说明表示,每个文件的配置最大为1Mb,单次请求的文件的总数不能大于10Mb。要更改这个默认值需要在配置文件(如application.properties)中加入两个配置:
- multipart.maxFileSize
- multipart.maxRequestSize
Spring Boot 1.3.x或者之前
multipart.maxFileSize=100MB
multipart.maxRequestSize=1000MB
Spring Boot 1.4.x
spring.http.multipart.maxFileSize=100MB
spring.http.multipart.maxRequestSize=1000MB
Spring Boot 2.0之后
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=1000MB