如何在浏览器中打开预览pdf,而不是下载

news2024/10/25 15:11:38

背景

上传了pdf文件之后,点击查看,跳转pdf的url,期望是浏览器中预览,而不是直接下载

原理

需要pdf资源url的响应头是下面下面这2个属性

Content-Type: application/pdf
Content-Disposition: inline; 

如何做

  1. 如果pdf资源服务器是自己内部可修改的,那就让服务修改下响应头
  2. 如果无法修改,可以自己写一个代理服务,服务端请求到资源后,修改响应头,在返回给客户端

代理服务的代码实现
请求方式:http://localhost:3000/get-pdf?url=http://xxxxx/xxxxx.pdf
注意:pdf资源的url不要使用https,否则会验签失败

const http = require('http');
const nodefetch = require('node-fetch');

const PORT = 3000;

const server = http.createServer(async (req, res) => {
  if (req.url === '/get-pdf' && req.method === 'GET') {
  	let PDF_URL = req.query.url
    let pass = await checkUrl(PDF_URL)
    if (!pass) {
    	res.send('Not Found');
        return
    }
    // 请求第三方PDF文件
    let data = null
    try {
        data = await nodefetch(PDF_URL, {
            method: "GET",
            headers: {
                "Content-Type": "application/pdf",
            }
        })
    } catch (error) {
        data = {
            body: 'error'
        }
    }
    // 重点在这里
    res.setHeader('Content-Type', 'application/pdf')
    res.setHeader('Content-Disposition', 'inline')
    data.body.pipe(res)


  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('Not Found');
  }
});

function checkUrl(url){
  // 可以配置白名单,或者域名校验一下
  url = decodeURIComponent(url)
   let domain = url.split('/')[2]
  if (domain === 'localhost:3000'){
	return true
  } else {
  return false
}

server.listen(PORT, () => {
  console.log(`Server is listening on port ${PORT}`);
});

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows Python安装和配置教程

文章目录 一,下载方式(一)官网下载注:下载选项说明注:查看本机操作系统位数步骤 (二)网盘下载 二,安装三,测试安装效果(一)检测安装配置&#xff…

新书速览|Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)

《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》 1 本书内容 SSM是当前使用广泛的Java Web开发框架。《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》由浅入…

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

浅谈BIM+GIS在管廊机电监控与运维管控系统中的应用

文:安科瑞郑桐 摘要:本文提出了一种城市综合管廊监控与报警集成管控平台的架构,并对以BIMGIS为核心的系统功能进行了研究和分析,通过GIS实现对管廊整体及设备设施的全局定位及管理,利用BIM实现对管廊设备的空间定位&a…

第6篇:无线与移动网络

目录 引言 6.1 无线网络的基础概念 6.2 无线局域网(WLAN)与IEEE 802.11 6.3 蓝牙与无线个域网(WPAN) 6.4 无线城域网(WMAN)与WiMax 6.5 ZigBee与智能家居 6.6 移动蜂窝网络(3G/4G/5G&…

SpringColoud GateWay 核心组件

优质博文:IT-BLOG-CN 【1】Route路由: Gateway的基本构建模块,它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。 Route路由-动态路由实现原理: 配置变化Apollo 服务地址实例变化…

AMD XILINX 20nm器件价格上调25%

随着市场回暖,台积电也在调整价格策略,近期台积电上调了20nm的出厂价格。 据相关消息显示,AMD为了保障持续的供货和服务,也计划将20nm器件的价格统一上调25%,预计将于11月发布正式的涨价通知,并于2025年Q1开…

七,Linux基础环境搭建(CentOS7)- 安装Scala和Spark

Linux基础环境搭建(CentOS7)- 安装Scala和Spark 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Scala下载及安装 Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现…

基于Java+SpringBoot+Vue的宠物咖啡馆平台的设计与实现

基于JavaSpringBootVue的宠物咖啡馆平台的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接&#…

ubuntu编译kaldi和vosk

文章目录 前言一、开源框架的选取二、kaldi编译三、编译vosk方案一方案二 前言 由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源框架,选中了vosk这个开源库&#xf…

微软:全球每天网络攻击超6亿次

《2024年微软数字防御报告》揭示了一个复杂的全球网络安全格局,每天发生超过6亿次网络攻击。报告强调了勒索软件、网络钓鱼和身份泄露事件的增加,以及网络犯罪团伙和国家行为者之间的合作。它强调了人工智能在攻击和防御中的重要作用,敦促组织…

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页功能界面图 用户注册、登录界面图 我…

Java中的程序、进程、线程、并行和并发

程序 一段静态的代码进程 ① 正在内存中运行的“程序” ② 是操作系统调度和分配资源的最小单位线程 ① 进程可进一步细化为线程,是程序内部的一条执行路径,一个进程中至少有一个线程 ② 线程是CPU调度和执行的最小单位 ③ 多个线程共享相同的内存单元&a…

用docker Desktop 下载使用thingsboard/tb-gateway

1、因为正常的docker pull thingsboard/tb-gateway 国内不行了,所以需要其它工具来下载 2、在win下用powershell管理员下运行 docker search thingsboard/tb-gateway 可以访问到了 docker pull thingsboard/tb-gateway就可以下载了 3、docker Desktop就可以看到…

EasyExcel_动态表头的导入导出

文章目录 前言一、EasyExcel二、使用步骤1.引入jar包2.数据准备2.1 数据库 3.方法实例3.1 无实体的导入3.1.1 Controller3.1.2 Service3.1.3 Listener3.1.4 Utils3.1.5 无实体导入数据返回说明 3.2 无实体的导出3.2.1 无实体导出数据(这里只贴出关键代码,Service代码处理)3.2.2…

凸优化学习

认为学习凸优化理论比较合适的路径是: 学习/复习线性代数和(少量)高等数学的知识。 实际上,凸优化理论综合使用了线性代数和微积分的相关知识,比如方向导数,雅克比矩阵,海森矩阵,KKT…

大数据-189 Elasticsearch - ELK 日志分析实战 - 环境配置启动 Nginx、ZK、Kafka、ES、Kibana

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

写出Windows操作系统内核的程序员,70多岁,还去办公室敲代码

大家好,我是二哥呀。 微软前 CEO 鲍尔默曾说过一句言简意赅的话:“没有 Dave,就没有今天的微软”。 可见 Dave 在微软的分量。Dave 的全名叫 Dave Cutler,微软的超级程序员,Windows NT 操作系统内核的缔造者&#xf…

【Java】ArrayList相关操作及其案例

ArrayList相当于集合&#xff0c;作为一种容器存储数据&#xff0c;与数组类似。不同的是&#xff0c;ArrayList中长度可变&#xff0c;而数组长度不可变。 ArrayList相关API 构造器 public ArrayList() 创建一个空的集合对象 ArrayList<String>arrnew ArrayList<>…

RHCE【web服务器】

目录 一、web服务器简介 1、什么是www 2、网址及HTTP简介 3、http协议请求的工作过程&#xff1a; 二、web服务器的类型 1、仅提供用户浏览的单向静态网页 2、提供用户互动接口的动态网站 三、web服务器基本配置 四、虚拟主机配置实战 1、搭建静态网站--基于http协议…