#spring文件上传
-
WEB-INF:相对安全的文件夹,前端资源存放在WEB-INF中时,前端浏览器不能直接访问,但是可以通过后端返回,优势就是可以通过后端进行控制。
-
视图解析器:
将页面存放在WEB-INF中,经过后端控制会更安全,每次每次都要写重复的前缀后缀比较麻烦,所以可以配置视图解析器
<!--视图解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/pages/"></property> <!--后缀--> <property name="suffix" value=".html"></property> </bean>
@Controller @RequestMapping("/index") public class IndexController { @RequestMapping("/hello") public String hello(){ System.out.println("hello world"); // return "/WEB-INF/pages/hello.html"; //当页面比较多时,每次都要写重复的 // 前缀后缀比较麻烦,所以配置视图解析器 return "hello"; //配置了前缀和后缀的视图层 } }
-
文件上传
-
步骤
<!-- commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <!-- javax.servlet-api:只是为了获取request用的,跟上传没有直接关系 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
-
配置文件上传解析器
<!--上传文件解析器--> <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean>
-
代码实现
user_form.html
<!--表单文件上传: 1. 请求方式为post 2. enctype="multipart/form-data" --> <form action="/day5/submit_form" method="post" enctype="multipart/form-data"> 账号: <input type="text" name="userName"><br> 密码: <input type="password" name="userPassword"><br> 上传头像: <input type="file" name="userImagepath"><br> <input type="submit" value="提交"> </form>
UploadController
@Controller public class UploadController { /** * 访问user_form.html */ @RequestMapping("/user_form") public String userForm(){ return "user_form"; } /** * 1. 接收表单的普通参数:账号和密码 * 2. 将文件上传到服务器 * * 参数User:接收账号和密码,User的文件上传路径属性不要跟前端文件上传的name一致⭐⭐⭐⭐⭐ * 参数userImagepath:设置为MultipartFile(文件上传类型),参数名字根前端文件上传的name一致⭐⭐⭐⭐⭐⭐ */ @RequestMapping("/submit_form") @ResponseBody public String submitForm(User user, MultipartFile userImagepath, HttpServletRequest request){ System.out.println(user); //1. 获取文件原始名字 String filename = userImagepath.getOriginalFilename(); //2. 获取项目在服务器上的根路径 //D:\student\chengshixueyuan_code\day5\target\day5\111.jpg // target中的项目是部署到服务器上之后编译之后的项目 String realPath = request.getServletContext().getRealPath("/"); System.out.println(realPath); //2. 文件长传 try { userImagepath.transferTo(new File(realPath+filename)); } catch (IOException e) { e.printStackTrace(); } return "success"; } }
-