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;
}
}