一、背景
上篇文章介绍了图片的预览,这篇我们介绍下 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 {
@Override
protected 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();
}
}
三、验证
大家注意看右上角,下载按钮也有了,这个是浏览器的功劳,所以一旦我们做了文件预览功能,下载功能就自动生成了,是不是特别棒~