ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文使用ResponseEntity实现下载文件的功能
在resources目录下创建目录并添加图片文件
在index的页面文件中添加一个超链接
在java目录下创建一个控制层的类
在该方法中添加相应的方法
package com.springMVC.controller; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.UUID; /* * ResponseEntity:可以作为控制器方法的返回值,表示响应到浏览器的完整的响应报文 * * * */ @Controller public class FileUpAndDownController { @RequestMapping("/test/down") public ResponseEntitytestResponseEntity(HttpSession session) throws IOException { //获取ServletContext对象 ServletContext servletContext = session.getServletContext(); //获取服务器中文件的真实路径 String realPath = servletContext.getRealPath("img"); realPath = realPath + File.separator + "feiji.png"; //创建输入流 FileInputStream is = new FileInputStream(realPath); //创建字节数组,is.available()获取输入流所对应文件的字节数 byte[] bytes = new byte[is.available()]; //将流读到字节数组中 is.read(bytes); //创建HttpHeaders对象设置响应头信息 MultiValueMap headers = new HttpHeaders(); //设置要下载方式以及下载文件的名字 headers.add("Content-Disposition","attachment;filename=feiji.png"); //设置响应状态码 HttpStatus httpStatus = HttpStatus.OK; //创建ResponseEntity对象 ResponseEntity responseEntity =new ResponseEntity (bytes,headers,httpStatus); //关闭输入流 is.close(); return responseEntity; } @RequestMapping("/test/up") public String testUp(MultipartFile photo, HttpSession session) throws IOException { //1.获取上传文件的文件名 String filename = photo.getOriginalFilename(); //获取上传文件的后缀名 String substring = filename.substring(filename.lastIndexOf(".")); //获取uuid String uuid = UUID.randomUUID().toString(); //拼接一个新的文件名 filename = uuid +substring; //2.获取ServletContext对象 ServletContext servletContext = session.getServletContext(); //3.获取当前工程下photo目录的真实路径 String photoPath = servletContext.getRealPath("photo"); //4.创建photoPath所对应的File对象 File file = new File(photoPath); //5.判断file所对应的目录是否存在 if (!file.exists()){ file.mkdir(); } //6.传入到哪里 String finalPath = photoPath + File.separator + filename; //7.上传文件 photo.transferTo(new File(finalPath)); return "success"; } }
运行程序如下所示:
文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息
在index中创建表单
在pom.xml文件中添加相关依赖
在springMVC的配置文件中设置文件上传解析器
在控制层的类中添加相应的方法
运行程序如下所示:
点击提交如下所示:
在上一个控制层的类中的方法代码的步骤1到步骤2之间添加如下所示
运行结果如下所示: