当前位置: 首页 > news >正文

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

背景

上传了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.urllet pass = await checkUrl(PDF_URL)if (!pass) {res.send('Not Found');return}// 请求第三方PDF文件let data = nulltry {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.mrgr.cn/news/57510.html

相关文章:

  • Docker 私有仓库 Harbor介绍
  • edge浏览器:你的连接不是专用连接
  • 数据库字段存储加解查询解密
  • 如何开启华为交换机 http
  • 2024年软件设计师中级(软考中级)详细笔记【8】算法设计与分析(分值4~5)
  • git区分大小写吗?如果不区分,那要如何设置?
  • 基于neo4j的疫情信息管理系统
  • C# 委托简述
  • 基于SSM健身国际俱乐部系统的设计
  • 好的代码——个人观点
  • 2024怎么保护企业办公文件?10款企业常用的文件加密软件排行榜!
  • docker部署SQL审核平台Archery
  • 【Python学习】Python基础,对于库和框架的讲解(优点缺点)小白必备的!!!
  • 邦芒干货:职场中这三种人值得深交
  • 手持无人机飞手执照,会组装调试入伍当兵有多香!
  • 发现创新的力量:我们的网址专利检索平台
  • 文心一言 VS 讯飞星火 VS chatgpt (376)-- 算法导论24.4 8题
  • Leetcode3. 无重复字符的最长子串
  • 【网络协议栈】Tcp协议(下)的可靠性和高效性(超时重传、快速重传、拥塞控制、流量控制)
  • Spring Boot植物健康系统:智能农业的春天
  • LogicFlow自定义业务节点
  • LCR 159.库存管理
  • 基于51单片机的电子时钟整点报时proteus仿真
  • git合并代码时产生冲突,如何解决代码冲突
  • Python网络爬虫入门指南
  • 【JavaScript】JavaScript 进阶-1(更新中)