Nabongs 2022-09-15 11:04 采纳率: 33.3%
浏览 76
已结题

使用springMVC上传文件,后台一直都接收不到数据,报错

使用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 +
                '}';
    }
运行结果及报错内容

报错截图

img

我的解答思路和尝试过的方法

我有在后台输出我接收的内容,发现都为null,就是不是file也为null,在网上搜了很久但是发现怎么都接受不到。
有怀疑是配置类的问题,但是也不清楚问题出在什么地方,请求解答!

终于发现了问题所在

在FileLoadConfig配置类里,我的方法名与返回值写一样了。
把方法名首字母改小写就行了,没想到这个小bug困扰这么久!

   @Bean
    public MultipartResolver multipartResolver(){
        return new CommonsMultipartResolver();
    }

  • 写回答

4条回答 默认 最新

  • 叫兽-郭老师 Java领域新星创作者 2022-09-15 11:24
    关注

    public String toShow(RequestParam(value="ms")String ms, @RequestParam(value="file" required = false) MultipartFile file, HttpServletRequest req){
    如果不行的话
    用 String ms=req.getParameter("ms"); 来取值

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月17日
  • 修改了问题 9月15日
  • 创建了问题 9月15日

悬赏问题

  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 TeleScan不能修改bar
  • ¥100 请问我基于逐飞库写的这个有关于mp u6050传感器的函数,为什么输出的值是固定的?
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息