Servlet 预览pdf

一、背景

上篇文章介绍了图片的预览,这篇我们介绍下 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();
    }
}

三、验证

Servlet 预览pdf_第1张图片

大家注意看右上角,下载按钮也有了,这个是浏览器的功劳,所以一旦我们做了文件预览功能,下载功能就自动生成了,是不是特别棒~

你可能感兴趣的:(JavaEE,servlet,pdf)