springmvc笔记-7-文件上传下载,拦截器
来源:互联网 发布:开淘宝网店详细步骤 编辑:程序博客网 时间:2024/06/15 13:58
文件上传:
springmvc上传文件需要依赖:
Apache Commons FileUpload组件jar和commons.io
Apache Commons FileUpload的下载地址:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
commons.io的下载地址:http://commons.apache.org/proper/commons-io/
案例:
上传文件的表单设置必须 enctype=”multipart/form-data” method=”post”
访问:http://localhost:8080/springmvcNote1/fileupdownload/updown
进入loginForm方法,跳转到upDownloadFile.jsp页面
@RequestMapping("updown") public String loginForm(){ // 动态跳转页面 return "fileUpDownload/upDownloadFile"; }
选好上传文件后提交跳转到upload的方法
// 上传文件会自动绑定到MultipartFile中 @RequestMapping(value="/upload",method=RequestMethod.POST) public String upload(HttpServletRequest request, @RequestParam("description") String description, @RequestParam("file") MultipartFile file) throws Exception{ System.out.println(description); // 如果文件不为空,写入上传路径 if(!file.isEmpty()){ // 上传文件路径 String path = request.getServletContext().getRealPath( "/upload/"); System.out.println(path); // 上传文件名 String filename = file.getOriginalFilename(); File filepath = new File(path,filename); // 判断路径是否存在,如果不存在就创建一个 if (!filepath.getParentFile().exists()) { filepath.getParentFile().mkdirs(); } // 将上传文件保存到一个目标文件当中 file.transferTo(new File(path+File.separator+ filename)); return "fileUpDownload/success"; }else{ return "fileUpDownload/error"; } }
对应的xml配置
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传文件大小上限,单位为字节(10MB) --> <property name="maxUploadSize"> <value>10485760</value> </property> <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 --> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean>
上传文件案例二:使用对象接受上传文件
访问:http://localhost:8080/springmvcNote1/fileupdownload/personup
进入upform方法跳转到personup.jsp页面
@RequestMapping("personup") public String upform(){ return "fileUpDownload/personup"; }
填写上传文件提交,进入register方法
@RequestMapping(value="/register") public String register(HttpServletRequest request, @ModelAttribute UpUser upUser, Model model)throws Exception{ System.out.println(upUser.getUsername()); // 如果文件不为空,写入上传路径 if(!upUser.getImage().isEmpty()){ // 上传文件路径 String path = request.getServletContext().getRealPath( "/personUpload/"); // 上传文件名 String filename = upUser.getImage().getOriginalFilename(); File filepath = new File(path,filename); // 判断路径是否存在,如果不存在就创建一个 if (!filepath.getParentFile().exists()) { filepath.getParentFile().mkdirs(); } // 将上传文件保存到一个目标文件当中 upUser.getImage().transferTo(new File(path+File.separator+ filename)); // 将用户添加到model model.addAttribute("upUser", upUser); return "fileUpDownload/success"; }else{ return "fileUpDownload/error"; } }
对应的实体
package com.entity;import java.io.Serializable;import org.springframework.web.multipart.MultipartFile;public class UpUser implements Serializable{ private String username; private MultipartFile image; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public MultipartFile getImage() { return image; } public void setImage(MultipartFile image) { this.image = image; }}
xml配置同上一个案例
下载:只需要各一个链接便可
文件控制器代码
//文件下载 @RequestMapping(value="/download") public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("filename") String filename, Model model)throws Exception{ // 下载文件路径 String path = request.getServletContext().getRealPath( "/personUpload/"); File file = new File(path+File.separator+ filename); HttpHeaders headers = new HttpHeaders(); // 下载显示的文件名,解决中文名称乱码问题 String downloadFielName = new String(filename.getBytes("UTF-8"),"iso-8859-1"); // 通知浏览器以attachment(下载方式)打开图片 headers.setContentDispositionFormData("attachment", downloadFielName); // application/octet-stream : 二进制流数据(最常见的文件下载)。 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); // 201 HttpStatus.CREATED return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED); }
下载页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <a href="download?filename=文件下载名">asdfasdfasdf</a></body></html>
拦截器:
springmvc拦截器有两种实现方式
//springmvc可以用下面两种方式设置拦截器//implements HandlerInterceptor(org.springframework.web.servlet.HandlerInterceptor)//extends HandlerInterceptorAdapter(org.springframework.web.servlet.handler.HandlerInterceptorAdapter;)
访问:
http://localhost:8080/springmvcNote1/interceptor/loginForm
进入loginform方法,跳转到loginForm.jsp页面
@RequestMapping("loginForm") public String loginform(){ return "interceptor/loginForm"; }
输入用户名和密码提交,
@RequestMapping(value="/login") public ModelAndView login( String name,String password, ModelAndView mv, HttpSession session){ // 模拟数据库根据登录名和密码查找用户,判断用户登录 if(name != null && name.equals("caoxuekun") && password!= null && password.equals("123")){ // 模拟创建用户 User user = new User(); user.setName(name); user.setPassword(password); // 登录成功,将user对象设置到HttpSession作用范围域 session.setAttribute("user", user); // 转发到main请求 mv.setViewName("redirect:main");//重定向 }else{ // 登录失败,设置失败提示信息,并跳转到登录页面 mv.addObject("message", "登录名或密码错误,请重新输入!"); mv.setViewName("interceptor/loginForm"); } return mv; }
main的重定向
@RequestMapping("main") public String main(){ return "interceptor/main"; }
拦截器对应类
package com.core;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import com.entity.User;//springmvc可以用下面两种方式设置拦截器//implements HandlerInterceptor(org.springframework.web.servlet.HandlerInterceptor)//extends HandlerInterceptorAdapter(org.springframework.web.servlet.handler.HandlerInterceptorAdapter;)public class MyInterceptor implements HandlerInterceptor{ // 不拦截"/loginForm"和"/login"请求 private static final String[] IGNORE_URI = {"/loginForm", "/login"}; /** * 该方法将在整个请求完成之后执行, 主要作用是用于清理资源的, * 该方法也只能在当前Interceptor的preHandle方法的返回值为true时才会执行。 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception { System.out.println("AuthorizationInterceptor afterCompletion --> "); } /** * 该方法将在Controller的方法调用之后执行, 方法中可以对ModelAndView进行操作 , * 该方法也只能在当前Interceptor的preHandle方法的返回值为true时才会执行。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception { System.out.println("AuthorizationInterceptor postHandle --> "); } /** * preHandle方法是进行处理器拦截用的,该方法将在Controller处理之前进行调用, * 该方法的返回值为true拦截器才会继续往下执行,该方法的返回值为false的时候整个请求就结束了。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("AuthorizationInterceptor preHandle --> "); // flag变量用于判断用户是否登录,默认为false boolean flag = false; //获取请求的路径进行判断 String servletPath = request.getServletPath(); // 判断请求是否需要拦截 for (String s : IGNORE_URI) { if (servletPath.contains(s)) { flag = true; break; } } // 拦截请求 if (!flag){ // 1.获取session中的用户 User user = (User) request.getSession().getAttribute("user"); // 2.判断用户是否已经登录 if(user == null){ // 如果用户没有登录,则设置提示信息,跳转到登录页面 System.out.println("AuthorizationInterceptor拦截请求:"); request.setAttribute("message", "请先登录再访问网站"); request.getRequestDispatcher("loginForm").forward(request, response); }else{ // 如果用户已经登录,则验证通过,放行 System.out.println("AuthorizationInterceptor放行请求:"); flag = true; } } return flag; }}
拦截器的xml配置:
<!-- 拦截器配置 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*"/> <!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 --> <bean class="com.core.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>
实体类
package com.entity;import java.io.Serializable;public class User implements Serializable{ private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
- springmvc笔记-7-文件上传下载,拦截器
- SpringMVC笔记(五)文件的上传下载
- springmvc文件上传下载
- springmvc文件上传下载
- SpringMVC 文件上传下载
- springmvc文件上传下载
- springmvc实现文件上传下载
- SpringMVC上传下载文件
- SpringMVC文件上传下载
- SpringMVC multipart文件上传下载
- springmvc工程文件上传下载
- springmvc文件上传下载
- SpringMVC文件上传下载
- SpringMVC的文件上传下载
- SpringMVC 文件上传下载
- SpringMVC文件上传下载
- SpringMVC文件上传下载
- SpringMVC实现上传下载文件
- 5.1.10—二叉树的遍历—Balanced Binary Tree
- Java内存回收与分配
- 5.1.11—二叉树的遍历—Flatten Binary Tree to Linked List
- ?
- ConcurrentHashMap
- springmvc笔记-7-文件上传下载,拦截器
- hdu 6070 Dirt Ratio(二分+线段树)(2017 Multi-University Training Contest
- 5.1.12—二叉树的遍历—Populating Next Right Pointers in Ea Node II
- 开发环境配置(hibernate4)和简单增删改查
- php使用phpexcel类操作excel文件数据
- docker~从Dockerfile到Container的过程(终于算是OK了)
- 5.2.1—二叉树的构建—Construct Binary Tree from Preorder and Inorder Traversal
- 数据类型,引用数据类型
- Codeforces837C two seals