前言:

在我们项目中,下载png,jpg的文件是非常方便的,动态生成一个a标签,给他赋值路径,动态点击,就可以实现这个功能,但是pdf,word等类型的文件是不行的,因为浏览器不允许我们直接点击下载,是点击预览,我们在这里分享下各自的方法。

目录:

一、下载png,jpg等常见问题的方法

方法一:( jpg png等)

方法二:(word(docx) excel(xlsx) ppt jpg png等)

二、下载pdf的方法()

***在说具体方法之前,先解决一个问题,就是使用下面的方法:点击下载pdf却是打开预览的问题 (mock.js,如果页面中使用了mock.js一定会出现这个问题,因为我们的打开页面请求被拦截了,解决办法,把页面引入的mock去掉),下面是我项目中引入的mock,必须注释才能解决这个问题

方法一:pdf

方法二:pdf,xlsx等各种格式


一、下载png,jpg等常见问题的方法

方法一:( jpg png等)

const link = document.createElement('a')link.style.display = 'none'link.href = url  //(放你的路径)document.body.appendChild(link)link.click()document.body.removeChild(link)

方法二:(word(docx) excel(xlsx) ppt jpg png等)

/***下载或导出文件* @param blob  :返回数据的blob对象* @param tagFileName  :下载后文件名标记* @param fileType  :文件类 word(docx) excel(xlsx) ppt等*/
const saveFileToBlob = (blob, tagFileName, fileType) => {// if (fileType) {//   console.warn('未传入文件类型,例如文件类 word(docx) excel(xlsx) ppt jpg png等')// }// if (isBlob(blob)) {var downloadElement = document.createElement('a')let href = window.URL.createObjectURL(blob) //创建下载的链接downloadElement.href = hrefdownloadElement.download = tagFileName + '.' + fileType //下载后文件名document.body.appendChild(downloadElement)downloadElement.click() //点击下载document.body.removeChild(downloadElement) //下载完成移除元素window.URL.revokeObjectURL(href) //释放掉blob对象// } else {//   console.warn('不是blob对象类型的参数,可选择saveFileToBase64(Base64对象,文件类型)或saveFileToLink(文件链接,文件名,文件类型,进度回调方法)')// }
}

二、下载pdf的方法()

***在说具体方法之前,先解决一个问题,就是使用下面的方法:点击下载pdf却是打开预览的问题 (mock.js,如果页面中使用了mock.js一定会出现这个问题,因为我们的打开页面请求被拦截了,解决办法,把页面引入的mock去掉),下面是我项目中引入的mock,必须注释才能解决这个问题

方法一:pdf

调用:
let  src = '你的pdf路径'
downloadFile(src,'333')//地址,你的文件名
    /*** 下载文件,支持pdf,word等格式* */const downloadFile = (data, fileName ) => {if (!data) {return;}let url = window.URL.createObjectURL(new Blob([data]));let link = document.createElement('a');link.style.display = 'none';link.href = url;link.setAttribute('download', fileName + '.pdf');document.body.appendChild(link);link.click();}

方法二:pdf,xlsx等各种格式

//调用
saveFileToLink(url,'555','pdf') //地址,文件名,文件类型
    /*** 文件链接转文件流下载--主要针对pdf 解决谷歌浏览器a标签下载pdf直接打开的问题* @param url  :文件链接* @param fileName  :文件名;* @param type  :文件类型;* @param fn  :进度回调方法;*/const saveFileToLink = (url, fileName, type, fn) => {if (!CheckUrl(url)) {throw new Error('传入参数不合法,不是标准的文件链接')} else {var xhr = new XMLHttpRequest()// url = url.includes('https:') ? url.replace('https:', '') : url.replace('http:', '')//资源路径动态获取请求的方式HTTPS或HTTP// console.log(url)xhr.open('get', url, true)xhr.setRequestHeader('Content-Type', `application/${type}`)xhr.setRequestHeader('If-Modified-Since', '0') //解决缓存问题,每次请求都去请求服务器获取最新数据xhr.responseType = 'blob'xhr.onprogress = function(e) { //文件下载进度if (fn && typeof fn === 'function') {fn(e)//监听文件下载进度;}},xhr.onload = function() {if (this.status == 200) {//接受二进制文件流var blob = this.responsesaveFileToBlob(blob, fileName, type)}},xhr.send()}}
    /***下载或导出文件* @param blob  :返回数据的blob对象* @param tagFileName  :下载后文件名标记* @param fileType  :文件类 word(docx) excel(xlsx) ppt等*/const saveFileToBlob = (blob, tagFileName, fileType) => {// if (fileType) {//   console.warn('未传入文件类型,例如文件类 word(docx) excel(xlsx) ppt jpg png等')// }// if (isBlob(blob)) {var downloadElement = document.createElement('a')let href = window.URL.createObjectURL(blob) //创建下载的链接downloadElement.href = hrefdownloadElement.download = tagFileName + '.' + fileType //下载后文件名document.body.appendChild(downloadElement)downloadElement.click() //点击下载document.body.removeChild(downloadElement) //下载完成移除元素window.URL.revokeObjectURL(href) //释放掉blob对象// } else {//   console.warn('不是blob对象类型的参数,可选择saveFileToBase64(Base64对象,文件类型)或saveFileToLink(文件链接,文件名,文件类型,进度回调方法)')// }}
    /*** 校验是否url链接* @param url  :url链接* @returns {Bool}:是否url链接*/const CheckUrl = (url) => {let reg = /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~\/])+$/return reg.test(url)}

到这里就结束了!

vue和js点击下载pdf,word,png,jpg等格式的文件,解决点击下载pdf却是打开预览的问题相关推荐

  1. 微信小程序下载word,excel,doc,pdf并打开预览并可以转发收藏

    //查看并下载 contract() {wx.downloadFile({//下载url: url,//服务器上面的地址filePath: wx.env.USER_DATA_PATH + '/test ...

  2. IOS 打开预览pdf、ppt、excel、word、tet、rtf、csv格式的文件,微信文件分享

    前言:打开预览pdf.ppt.excel.word.tet.rtf.csv格式的文件有两种一方,一种是利用 UIWebView或者WKWebView 来直接打开,另一种就是利用 QLPreviewCo ...

  3. 纯前端下载pdf链接文件,而不是打开预览的解决方案

    纯前端下载pdf链接文件,而不是打开预览的解决方案 参考文章: (1)纯前端下载pdf链接文件,而不是打开预览的解决方案 (2)https://www.cnblogs.com/jackson-yqj/ ...

  4. 微信小程序打开预览下载的文件

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 使用 wx.openDocument(obj) 方法预览 wx.downloadFile({url: 'htt ...

  5. 怎么用JS端实现图片、视频时直接下载而不是打开预览

    项目中的附件列表,通常情况都需要提供下载.删除的功能,功能本身没有什么要说的,都是基本功能,使用浏览器的的下载功能,也都是用window.open(url),或者window.location.hre ...

  6. chrome浏览器 在线打开预览pdf文件,而不是下载文件。

    Content-Type: application/pdf Content-Disposition: inline; filename="pdf-file1.pdf" 关键有2个点 ...

  7. iOS 关于下载word/png/excel附件并打开预览

    需求:下载过的文件列表显示已下载,可以直接点击预览,如果没下载就提示它去下载 首先下载文件并预览这一过程,需要由下载文件路径,存储路径,预览文件三个步骤来完成. 不多说,直接上代码: #pragma ...

  8. 前端预览word文件_[装机必备] QuickLook —— 敲击空格即可快速预览文件

    ​今天给大家推荐的软件是:QuickLook 你只需要选中文件,然后敲击空格,就可以快速预览文件内容 QuickLook 有三个版本:安装版.便携版.UWP 版 作者对这三个版本的描述: *需要注意的 ...

  9. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  10. 什么是PDF(便携式文档格式)文件以及如何打开PDF?

    PDF is a popular file extension that is generally used to store documents, brochures, books, scanned ...

最新文章

  1. Spring boot 文件上传大小限制
  2. 如何在Git中克隆单个分支?
  3. Facebook 分享 MySQL 5.6 到 8.0 的迁移经验
  4. SAP HR信息类型
  5. 【Python教程】统计序列中元素出现频度的详细方法
  6. selenium容易忽视的知识点
  7. 随记(六)--计算代码运行所需时间
  8. 我为什么要学习C++反汇编
  9. 概率分布:PMF与PDF
  10. AngularJs入门学习
  11. URLConnection和HttpURLConnection类
  12. 小白初涉,先试试水。涉及Python,C语言基础,机器学习等
  13. 网页连接的服务器失败是怎么回事啊,网页怎么连接服务器失败
  14. wcdma系统随机接入过程的流程图_WCDMA终端的随机接入过程的射频测试
  15. javascript示例代码
  16. [转载] python关键字和保留字_Python关键字
  17. DEAP2.1软件与Malmquist指数操作说明
  18. 拼音分词器_自动补全
  19. 物联网安全有哪些关键技术?
  20. 线性代数学习之特征值与特征向量

热门文章

  1. 初一上册数学用计算机进行运算,初一上册数学
  2. redis安装及运行
  3. 数据结构—顺序表详解
  4. iOS 应用沙盒以及应用数据的存储方式
  5. Markdown安装,破解,修改中文
  6. 各国国家语言缩写与中文对应表 JAVA工具类
  7. ssoj 2279 磁力阵
  8. Mirth学习笔记 - 建立Mirth通道
  9. 2023南京工业大学计算机考研信息汇总
  10. 第一章 WEB应用程序开发流程