文章目录
一、前言
一般我们的项目需要实现下载和预览功能,我们这次主要通过HttpServletResponse输出流实现文件的下载和预览功能
二、项目之前的准备
我们需要准备maven依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--SpringBoot文件上传--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> </dependencies>
提前准备好pdf文件
三、项目实现代码
package com.whj.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; /** * @author 王恒杰 * @date 2022/10/26 9:26 * @Description: */ @RestController @RequestMapping("/file") public class FileController { @GetMapping("/downloadFile") public void downloadCheck(HttpServletRequest request, HttpServletResponse response) { try { File file = new File("D:\\Idea\\stamp\\Itext\\src\\main\\resources\\pdf\\EncryptPDF.pdf"); BufferedInputStream bis = null; OutputStream os = null; FileInputStream fileInputStream = null; response.setCharacterEncoding("utf-8"); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=EncryptPDF"); try { fileInputStream = new FileInputStream(file); byte[] buff = new byte[1024]; bis = new BufferedInputStream(fileInputStream); os = response.getOutputStream(); int i = bis.read(buff); while (i != -1) { os.write(buff, 0, buff.length); i = bis.read(buff); os.flush(); } os.flush(); os.close(); // return SimpleResult.ok("导出成功",os); } catch (IOException e) { e.printStackTrace(); // return SimpleResult.fail("导出失败",null); } finally { if (bis != null) { try { bis.close(); fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); // return SimpleResult.fail("导出失败",null); } } } } catch (Exception e) { e.printStackTrace(); } } @GetMapping("/previewCheck") public void previewCheck( HttpServletRequest request, HttpServletResponse response) throws IOException { FileInputStream is = new FileInputStream(new File("D:\\Idea\\stamp\\Itext\\src\\main\\resources\\pdf\\EncryptPDF.pdf")); // 清空response response.reset(); //2、设置文件下载方式 response.setCharacterEncoding("utf-8"); response.setContentType("application/pdf"); OutputStream outputStream = response.getOutputStream(); int count = 0; byte[] buffer = new byte[1024 * 1024]; while ((count = is.read(buffer)) != -1) { outputStream.write(buffer, 0, count); } outputStream.flush(); } }
四、功能演示
1、下载功能
地址:http://localhost:8081/file/downloadFile
2、预览功能
地址:http://localhost:8081/file/previewCheck