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 {@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();}
}

三、验证

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/411445.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django后台手机号加密存储

需求: 1 :员工在填写用户的手机号时,直接填写,在django后台中输入 2:当员工在后台确认要存储到数据库时,后台将会把手机号进行加密存储,当数据库被黑之后,手机号字段为加密字符 3&am…

新能源汽车智慧充电桩解决方案:智慧化综合管理与数字化高效运营

一、方案概述 TSINGSEE青犀&触角云新能源汽车智慧充电桩解决方案基于管理运营平台,覆盖业务与应用、数据传输与梳理、多端开发、搭建等模块,融合AI、5G、Wi-Fi 、移动支付等技术,实现充电基础设施由数字化向智能化演进,通过构…

day4:多点通信与域套接字

思维导图 使用tftp实现简单文件的上传 #include <head.h> #define SER_PORT 69 #define SER_IP "192.168.125.223" int link_file() {int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}return sfd; } int filedow…

多级树形结构查询 - 递归

表结构 CREATE TABLE pms_category (cat_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 分类id,name CHAR(50) NULL DEFAULT NULL COMMENT 分类名称 COLLATE utf8mb4_general_ci,parent_cid BIGINT(20) NULL DEFAULT NULL COMMENT 父分类id,cat_level INT(11) NULL DEFAULT …

【架构】docker实现3主3从架构配置【案例1/4】

一&#xff0c;集群规划及准备工作 架构实现&#xff1a;Redis3主3从 二&#xff0c;搭建命令 第一步&#xff0c;创建6台服务&#xff1a; docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --clust…

VSCode编写 C/C++ 程序

VSCode 全称 Visual Studio Code&#xff0c;是微软出的一款轻量级代码编辑器&#xff0c;免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性&#xff0c;支持插件扩展&#xff0c;并…

深度学习记录--梯度检验

数值逼近 为了对梯度进行检验&#xff0c;需要计算近似误差值来接近梯度 对于单边误差和双边误差公式&#xff0c;其中双边误差与真实梯度相差更小&#xff0c;故一般采用双边误差公式 双边误差 公式&#xff1a; 梯度检验(gradient checking) 对于成本函数&#xff0c;求出…

canvas绘制美队盾牌

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

记一次 .NET某道闸收费系统 内存溢出分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他的程序几天内存就要爆一次&#xff0c;不知道咋回事&#xff0c;找不出原因&#xff0c;让我帮忙看一下&#xff0c;这种问题分析dump是最简单粗暴了&#xff0c;拿到dump后接下来就是一顿分析。 二&…

力扣1929.数组串联

前言 虽然力扣对我来说很难&#xff0c;但只要每天刷一点&#xff0c;就会慢慢增强能力&#xff0c;总有一天刷动力扣的难题&#xff0c;所以说&#xff0c;今天也是刷力扣的一天。 &#x1f606;&#x1f606; /** * Note: The returned array must be malloced, assume call…

全新商业版SEO关键词按日计费系统/关键词排名优化+会员/网站/关键词管理+搭建教程

源码简介&#xff1a; 全新商业版SEO关键词按日计费系统&#xff0c;它不仅有关键词排名优化功能&#xff0c;还有会员管理、网站管理、关键词管理、关键词查价、公众号查询、财务管理和在线充值等功能&#xff0c;并且附带了搭建教程。 系统不仅具备关键词排名优化功能&…

STM32WLE5JC介绍

32位 ARM Cotrex-M4 CPU 32MHz晶体振荡器 32 kHz RTC振荡器与校准 20x32位备份寄存器 引导程序支持USART和SPI接口 介绍 STM32WLE5/E4xx远程无线和超低功耗器件嵌入了强大的超低功耗LPWAN兼容无线电解决方案&#xff0c;支持以下调制&#xff1a;LoRa&#xff0c;&#xff08…