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()会执行

相关内容

热门资讯

揭秘野佐料生烫牛肉店哪家靠谱的... 在昆明,想要品尝地道美食,野佐料生烫牛肉是不容错过的佳肴。对于很多人来说,寻找一家能吃到正宗野佐料生...
池州市2家!省级旅游度假区! 近日, 经省文化和旅游厅组织评定并批准, 平天湖旅游度假区、 秋浦河·大龙湾旅游度假区 正式荣膺安徽...
“秒级”通关!邮轮入境游火爆 ... 过去的一年,外国游客入境游持续火爆,其中也包括邮轮入境游。自外国旅游团邮轮入境免签政策实施以来,上海...
“尔滨”早市 从暖胃到暖心 刚出锅的油皮包子。 游客在驿站休息。 食品安全检查。 □文/摄 本报记者 刘瑞 清晨5时的哈尔滨...