springboot文件上传的时候控制层MultipartFile接收到的数据一直是null

springboot文件上传相关问题

在最近的这个项目中需要用到文件上传功能。但是第一次使用springboot框架,也不知道 文件上传都需要什么配置,网上说的是直接写,我就直接写了。先附上我写的测试代码。
jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
	<head>
	<meta charset="UTF-8">
		<title>首页 -后台</title>
	</head>
	<body>
		${rootPath } --->
		<table width="80%" border="1">
			<tr>
				<td>名称</td>
				<td>链接</td>
			</tr>
			<tr>
				<td>首页</td>
				<td><a href="${rootPath }/back/admins/main.htm" target="_blank">首页</a></td>
			</tr>
		</table>
		<!-- 表单提交 -->
		<form action="upload.htm" method="post" enctype="multipart/form-data" target="_blank">
			<input type="text" name="a" value="123456">
			<input type="file" name="file">
			<input type="submit" value="文件提交">
		</form>
		<!-- 表单提交 -->
		<form action="upload.htm" method="post" target="_blank">
			<input type="text" name="a" value="123456">
			<input type="file" name="file">
			<input type="submit" value="文本提交">
		</form>
	</body>
</html>

控制层代码:
这里的参数MuiltiPartFile是org.springframework.web.multipart.MultipartFile类型的参数

package com.example.demo;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

/**
 * 测试类,首页
 * @author TeaBig
 */
@Controller
@RequestMapping("/")
public class MainBackController
{
	/**
	 * 上传文件提交
	 * @return
	 */
	@RequestMapping("/upload")
	@ResponseBody
	public String upload(HttpServletRequest request,MultipartFile file)
	{
		String a = request.getParameter("a");
		System.out.println(a + "--初始打印-->" + file);
		if(file != null)
		{
			System.out.println(a + "--第二次打印-->" + file.getOriginalFilename());
		}
		return "Ok";
	}
}

反复的测试,结果还是一样的。
传到控制层的代码就一直是null。因为是第一次用springboot,这一个错误我搞了三天才找到原因。
最后找的的解决办法是:
在boot应用的main方法所在的类中注入:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.DispatcherServlet;

@SpringBootApplication
@EnableAutoConfiguration
public class ApplicationWeb {

	public static void main(String[] args) {
		SpringApplication.run(ApplicationWeb.class, args);
	}
	
	/**
	 * 增加访问的前缀和后缀
	 */
	@Bean
	public ServletRegistrationBean<DispatcherServlet> servletRegistrationBean(DispatcherServlet servlet)
	{
		ServletRegistrationBean<DispatcherServlet> bean = new ServletRegistrationBean<DispatcherServlet>(servlet);
		bean.addUrlMappings("*.htm");
		return bean ; 
	}
	
	//解决上传文件控制层接收为null的方法
	@Bean(name = "multipartResolver")
	public CommonsMultipartResolver multipartResolver() {
       CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
       return multipartResolver;
    }
}

发布了15 篇原创文章 · 获赞 8 · 访问量 9447

猜你喜欢

转载自blog.csdn.net/qq_42684504/article/details/90480691