SpringMVC-0314
创始人
2025-05-28 01:58:16

九、文件上传和下载

1、文件下载

使用ResponseEntity实现下载文件的功能

@RequestMapping("/Download")
public ResponseEntity testResponseEntity(HttpSession session) throws IOException {//获取ServletContext对象ServletContext servletContext = session.getServletContext();//获取服务器中文件的真实路径String realPath = servletContext.getRealPath("/static/img/1.jpg");//创建输入流InputStream is = new FileInputStream(realPath);//创建字节数组byte[] bytes = new byte[is.available()];//将流读到字节数组中is.read(bytes);//创建HttpHeaders对象设置响应头信息MultiValueMap headers = new HttpHeaders();//设置要下载方式以及下载文件的名字headers.add("Content-Disposition", "attachment;filename=1.jpg");//设置响应状态码HttpStatus statusCode = HttpStatus.OK;//创建ResponseEntity对象ResponseEntity responseEntity = new ResponseEntity<>(bytes, headers, statusCode);//关闭输入流is.close();return responseEntity;
}

2、文件上传

文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"

SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息

上传步骤:

a>添加依赖:


commons-fileuploadcommons-fileupload1.3.1

b>在SpringMVC的配置文件中添加配置:


c>控制器方法:

@RequestMapping("/Upload")
public String Upload(MultipartFile photo, HttpSession session) throws IOException {//获取上传的文件的文件名String fileName = photo.getOriginalFilename();//处理文件重名问题String hzName = fileName.substring(fileName.lastIndexOf("."));fileName = UUID.randomUUID().toString() + hzName;//获取服务器中photo目录的路径ServletContext servletContext = session.getServletContext();String photoPath = servletContext.getRealPath("photo");File file = new File(photoPath);if(!file.exists()){file.mkdir();}String finalPath = photoPath + File.separator + fileName;//实现上传功能photo.transferTo(new File(finalPath));return "success";
}

十、拦截器

1、拦截器的配置

  1. SpringMVC中的拦截器用于拦截控制器方法的执行

  1. SpringMVC中的拦截器需要实现HandlerInterceptor

  1. SpringMVC的拦截器必须在SpringMVC的配置文件中进行配置:


2、拦截器的三个抽象方法

SpringMVC中的拦截器有三个抽象方法:

preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法

postHandle:控制器方法执行之后执行postHandle()

afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()

3、多个拦截器的执行顺序

a>若每个拦截器的preHandle()都返回true

此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关:

preHandle()会按照==配置的顺序==执行,而postHandle()和afterComplation()会按照==配置的反序==执行

b>若某个拦截器的preHandle()返回了false

preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行

相关内容

热门资讯

提供知识面拓展宁都麻将有辅助挂... 您好,宁都麻将这款游戏可以开挂的,确实是有挂的,需要了解加微:5415480很多玩家在这款游戏中打牌...
提供技能培训七彩云南麻将开挂辅... 亲,七彩云南麻将这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好...
一分钟知道!牛牛房卡批发平台,... 一分钟知道!牛牛房卡批发平台,随意玩房卡获取联系方式【无需打开直接搜索微信;【44346008】 操...
我会分享经验教训学习技巧广西山... 是有广西山水麻将 终于有教程了 亲 欢迎拜访本公司网站 ,根据老牌记者爆料...
好友房游戏!微信牛牛房卡制作代... 好友房游戏!微信牛牛房卡制作代理,先锋大厅房卡购买渠道【要素一】(KK)微信链接各大厅/房卡介绍微/...