一、背景
上篇文章介绍了图片的预览,这篇我们介绍下 pdf 文件的预览,pdf 预览在实际开发中用的还是比较多的,比如很多文件协议、合同都是用pdf 格式,协议预览就需要我们做 pdf 预览了。
二、实操
其实在上篇文章最后已经说了常用 content-type 字段,其中的 application/pdf 就是我们的重点,话不多说看代码:
package top.lovelily.pdf;import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;public class PdfServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.创建字节输入流,关联读取的文件// 1.1 获取文件的绝对路径//String realPath = getServletContext().getRealPath("pdf/mesi.pdf");String realPath = "C:\\Users\\xxx\\Desktop\\pdf\\memory-barriers.pdf";// 1.2 创建字节输出流对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));//2.设置响应头支持的类型 应用支持的类型为字节流/*Content-Type 消息头名称 支持的类型application/pdf 消息头参数 应用类型为图片*/// resp.setHeader(" Content-Type", "application/pdf");// 当 header 的 key 是 Content-Type, 可以使用 resp.setContentType 方法resp.setContentType("application/pdf"); // pdf格式//3.获取字节输出流对象ServletOutputStream sos = resp.getOutputStream();//4.循环读写文件byte[] arr = new byte[1024];int len;while((len = bis.read(arr)) != -1) {sos.write(arr,0,len);}//6.释放资源bis.close();}
}
三、验证
大家注意看右上角,下载按钮也有了,这个是浏览器的功劳,所以一旦我们做了文件预览功能,下载功能就自动生成了,是不是特别棒~