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

相关内容

热门资讯

苹果macOS 26.6 RC... IT之家 7 月 21 日消息,苹果今日向 Mac 电脑用户推送了 macOS 26.6 RC 更新...
开源证券:给予三友化工买入评级 开源证券股份有限公司金益腾,张晓锋近期对三友化工进行研究并发布了研究报告《公司深度报告:公司为粘胶短...
暑期文博游火热!丰台警方严把场... 进入暑期,研学游学、亲子观光热潮来袭,各大博物馆游客数量大幅增加,为保障游客人身安全,北京市丰台公安...
龙岩古田景区智慧升级推荐:高效... 龙岩古田旅游区坐落于上杭县古田镇,是国家5A级红色旅游景区、全国红色研学与党建教育核心基地。景区依托...
兴义高铁站景区直通车正式运营 ... 近日,兴义市龙达城市公交有限公司与兴义市龙达国营客运有限公司联合将原有两条高铁旅游专线升级为高铁站景...