使用springMVC上传文件,后台一直都接收不到数据,报错
以下是我的相关代码
springMvc配置类
@Configuration
@ComponentScan("com.sy.controller")
@Import(FileLoadConfig.class)
@EnableWebMvc
public class SpringMvcConfig extends InternalResourceViewResolver {
@Value("/jsp/")
private String prefix;
@Value(".jsp")
private String suffix;
@Override
public String getPrefix() {
return prefix;
}
@Override
public void setPrefix(String prefix) {
this.prefix = prefix;
}
@Override
public String getSuffix() {
return suffix;
}
@Override
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}
FileLoadConfig配置类,配置文件上传
public class FileLoadConfig {
@Bean
public MultipartResolver MultipartResolver(){
CommonsMultipartResolver cmr=new CommonsMultipartResolver();
//cmr.setMaxInMemorySize(5000);
cmr.setMaxUploadSize(1024000);
cmr.setDefaultEncoding("utf-8");
return cmr;
}
}
servlet初始化
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
//中文乱码
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter=new CharacterEncodingFilter();
filter.setEncoding("utf-8");
return new Filter[]{filter};
}
}
前端jsp代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="toShow" method="post" enctype="multipart/form-data">
<p><label>上传文件:<input type="file" name="file"></label></p>
<p><label>文件描述:<input type="text" name="ms" ></label></p>
<input type="submit" value="确定上传">
</form>
</body>
</html>
后端接收代码
@Controller
public class FileTestController {
@RequestMapping("/toIndex")
public String toIndex(){
return "index";
}
@RequestMapping(value = "/toShow",method = RequestMethod.POST)
public String toShow(String ms, @RequestParam(required = false) MultipartFile file, HttpServletRequest req){
FileDomain fileDomain=new FileDomain();
fileDomain.setMs(ms);
fileDomain.setFile(file);
System.out.println(fileDomain.toString());
String fileName=fileDomain.getFile().getOriginalFilename();
System.out.println(fileName);
String path=req.getServletContext().getRealPath("upload");
File pathFile=new File(path,fileName);
if(!pathFile.exists()){
pathFile.mkdirs();
}
//上传
try {
fileDomain.getFile().transferTo(pathFile);
req.setAttribute("fileDomain",fileDomain);
} catch (IOException e) {
e.printStackTrace();
}
return "show";
}
}
pojo类
public class FileDomain {
private String ms;
private MultipartFile file;
public String getMs() {
return ms;
}
public void setMs(String ms) {
this.ms = ms;
}
public MultipartFile getFile() {
return file;
}
public void setFile(MultipartFile file) {
this.file = file;
}
@Override
public String toString() {
return "FileDomain{" +
"ms='" + ms + '\'' +
", file=" + file +
'}';
}
运行结果及报错内容
报错截图
我的解答思路和尝试过的方法
我有在后台输出我接收的内容,发现都为null,就是不是file也为null,在网上搜了很久但是发现怎么都接受不到。
有怀疑是配置类的问题,但是也不清楚问题出在什么地方,请求解答!
终于发现了问题所在
在FileLoadConfig配置类里,我的方法名与返回值写一样了。
把方法名首字母改小写就行了,没想到这个小bug困扰这么久!
@Bean
public MultipartResolver multipartResolver(){
return new CommonsMultipartResolver();
}