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

相关内容

热门资讯

超一亿元!珠峰南坡发生骗保大案 游客钱德拉瓦蒂被直升机从珠穆朗玛峰营救起,并飞往加德满都。尼泊尔一家徒步公司的运营者阿迪卡里建议将患...
致美三晋》太原旅游推荐:两日漫... 嘿,朋友!如果你正琢磨着怎么在短短两天里,把太原这座千年古城的精华“一锅端”,那这份攻略就是为你准备...
游老山 周末下午,天气格外好,当然心情也很好,我和好朋友一起去爬老山。 我们从山脚出发,沿着山路慢慢向上走。...
原创 广... 说起茂名,很多人只想到大海与荔枝,却不知这座粤西古城,藏着让人念念不忘的地道风味。今天就盘点8 种茂...