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

pdf格式文件下载不预览,云存储的跨域解决

需求背景

后端接口中返回的是pdf文件路径比如:

pdf文件路径 (https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf)

前端适配是这样的

 <ahref="https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf">超链接预览pdf</a>

点击后预览

但是客户方要求不预览点击后直接下载

示例演示  (pdf下载 - 码上掘金)

项目准备

有pdf链接的可以跨过该阶段

准备一个线上的pdf文件链接

登陆阿里云平台

1. 点击又上角的控制台

 2. 点击左上角的三道杠图标

 3. 点击左侧的对象云存储oss

 4. 点击bucket

5. 创建 bucket

 6. 创建成功后

 7. 上传文件

点击红框处

 点击上传文件

 

8. 上传完成后为了方便访问可以把文件的访问属性修改为公共的

到这里文件链接就创建好了,可以直接复制链接访问

解决文件链接跨域问题

点击数据安全中的跨域设置

规则设置

 

设置完成后就可以随意访问了啦

实现(js)

HML

<!DOCTYPE html>
<html lang="CH-EN"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>下载</title></head><body><div class="content"><ahref="https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf">超链接预览pdf</a><button id="btn" type="submit" onclick="download()">点击下载pdf</button></div></body>
</html>

script

<script>const filePath ="https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf";//  fileName是pdf名称 、filePath是pdf地址function downloadFil(fileName, filePath) {var ajax = new XMLHttpRequest();ajax.open("GET", filePath, true);ajax.responseType = "blob";ajax.onload = (e) => {console.log(e);let res = e.target.response;let blob = new Blob([res]);let aLink = document.createElement("a");aLink.download = `${fileName}.pdf`; // 下载文件的名字aLink.href = URL.createObjectURL(blob);aLink.click();};ajax.send();}function download() {downloadFil("test", filePath);}
</script>

style

<style>* {margin: 0;padding: 0;}body {display: flex;align-items: center;justify-content: center;}.content {height: 300px;width: 500px;border: solid #ddd 1px;text-align: center;padding: 20px;}.content input {height: 24px;line-height: 24px;font-size: 18px;border: 1px solid #dcdfe6;}.content input:focus {outline: none;border-color: #409eff;}.content input:focus-visible {outline-offset: 0px;}
</style>

实现(vue)

downloadjs

github地址:https://github.com/rndme/download

安装


npm install downloadjs -S

导入

import download from "downloadjs"


使用

download(url, strFileName, strMimeType);
download第一个参数为URL,第二个参数为文件名称,第三个参数文件类型,url必填,另外两个选填

遇到的问题

1.下载的文件打不开,且大小不对 // 中文名称文件下载 download(encodeURI(URL))
2.不能自定义名称
在URL进行转码后虽然可以下载PDF文件了,但名称却是转码后的名称,而不是原本的名称,这时我们用第二个参数进行命名时,名称是对了,可文件却出现打不开,大小不对的情况,暂时没找到解决方法。

file-saver

github地址:https://github.com/eligrey/FileSaver.js

该库是我之前写页面转PDF时使用到的库,既然之前可以保存pdf文件,那现在是不是也可以呢,上网一搜还真可以

安装

npm i file-saver

使用 

const that = this
var oReq = new XMLHttpRequest()
var URL= '' // URL 为URL地址
oReq.open('GET', URL, true)
oReq.responseType = 'blob'
oReq.onload = function() {var file = new Blob([oReq.response], {type: 'blob'})FileSaver.saveAs(file, that.name) // that.name为文件名
}
oReq.send()

http://www.lryc.cn/news/133244.html

相关文章:

  • httplib + nlohmann::json上传数据时中文乱码解决
  • JavaScript中的设计模式之一--单例模式和模块
  • 回归预测 | MATLAB实现GAM广义加性模型多输入单输出回归预测(多指标,多图)
  • css学习4(背景)
  • 二、SQL,如何实现表的创建和查询
  • 大数据及软件教学与实验专业实训室建设方案
  • 信创办公–基于WPS的EXCEL最佳实践系列 (公式和函数)
  • 【Apollo】自动驾驶感知——毫米波雷达
  • SpringBoot部署到腾讯云
  • Git 设置代理
  • 基于Spring Boot的机场VIP客户管理系统的设计与实现(Java+spring boot+MySQL)
  • 图数据库_Neo4j学习cypher语言_使用CQL_构建明星关系图谱_导入明星数据_导入明星关系数据_创建明星关系---Neo4j图数据库工作笔记0009
  • 恒运资本:算力概念强势拉升,亚康股份“20cm”涨停,首都在线等大涨
  • Neo4j之union基础
  • 搭建:基于nginx的上传功能
  • JavaScript高级
  • 隔断让你的办公室变得更加智能、环保、人性化
  • web文件上传
  • 二刷LeetCode--48. 旋转图像(C++版本),数学题
  • 神经网络改进:注重空间变化,权重参数调整,正则化, 熵的简单理解
  • 快速入门vue3新特性和新的状态管理库pinia
  • 字符串经典问题
  • 如何将图片应用于所有的PPT页面?
  • 打印技巧——word中A4排版打印成A3双面对折翻页
  • 2、手写模拟Spring底层原理
  • 6篇 ICML 2023 杰出论文解析,涉及无学习率、LLM水印、域泛化等方向
  • linux第三阶段--第三方软件(一)MySQL的概述和二进制安装(官网版)
  • AD域控制器将辅域控制器角色提升为主域控制器
  • Docker案例分析:创建并运行一个Redis容器
  • 银河麒麟服务器v10 sp1 .Net6.0 上传文件错误 access to the path is denied