当前位置: 首页>后端>正文

vue2实现pdf下载而不是浏览器打开(图片...同理)

方法一:

一般我们第一时间肯定是想用a标签加download属性,但它还是会在浏览器中打开,所有找其他方法

思路:使用vue自定义指令,对文件链接进行处理,将链接转化为blob进行下载

第一步:在src下创建download.js

import Vue from "vue";

import axios from 'axios'

Vue.directive('download', {

? inserted: (el, binding) => {

? ? el.addEventListener('click', () => {

? ? ? //获取文件名称

? ? ? let name = el.getAttribute('xzname')

? ? ? let link = document.createElement('a')

? ? ? let url = binding.value

? ? ? // 这里是将url转成blob地址,

? ? ? axios({

? ? ? ? method:'get',

? ? ? ? url:url,

? ? ? ? responseType:'blob',

? ? ? }).then(res=>{

? ? ? ? // 创建隐藏的可下载链接

? ? ? ? const a = document.createElement('a');

? ? ? ? a.style.display = 'none';

? ? ? ? a.href = URL.createObjectURL(res.data);

? ? ? ? // 保存下来的文件名

? ? ? ? a.download = name;

? ? ? ? document.body.appendChild(a);

? ? ? ? a.click();

? ? ? ? // 移除元素

? ? ? ? document.body.removeChild(a);

? ? ? })

? ? })

? }

})

第二步:main.js中进行注册? ?import './download'?

第三步:<a v-download="url">下载</a>

方法二:

安装依赖:npm i?file-saver

注册:import { saveAs as FileSaver } from 'file-saver'

使用:

const oReq = new XMLHttpRequest()

const URL= '文件地址';

oReq.open('GET', URL, true)

oReq.responseType = 'blob'

oReq.onload = function() {

? ? ? ? ? const file = new Blob([oReq.response], {

? ? ? ? ? ? type: 'blob'

????})

FileSaver.saveAs(file, fileName) // fileName为文件名

}

oReq.send()

方法三:

如不想使用vue自定义指令,就简单的一个方法调用,和方法一类似,也是转成blob形式下载

axios({

? ? ? ? ? ? method:'get',

? ? ? ? ? ? url:url,

? ? ? ? ? ? responseType:'blob',

? ? ? ? ? }).then(res=>{

? ? ? ? ? ? // 创建隐藏的可下载链接

? ? ? ? ? ? const a = document.createElement('a');

? ? ? ? ? ? a.style.display = 'none';

? ? ? ? ? ? a.href = URL.createObjectURL(res.data);

? ? ? ? ? ? // 保存下来的文件名

? ? ? ? ? ? a.download = name;

? ? ? ? ? ? document.body.appendChild(a);

? ? ? ? ? ? a.click();

? ? ? ? ? ? // 移除元素

? ? ? ? ? ? document.body.removeChild(a);

? ? ? ? ? })


https://www.xamrdz.com/backend/3we1936683.html

相关文章: