前端下载PDF

1.a标签下载

       const elink = document.createElement("a");
       elink.download = i.substring(i.lastIndexOf('/')+1);
       elink.style.display = "none";
       elink.target="_blank";
       elink.href = i;
       document.body.appendChild(elink);
       elink.click();
       URL.revokeObjectURL(elink.href); // 释放URL 对象
       document.body.removeChild(elink);

必须同源,否则会出现只跳转不下载的情况。

2.直接使用a标签并在url后拼接'?response-content-type=application/octet-stream'字符串就能实现下载。

url = url + "?response-content-type=application/octet-stream"

3.文件流

axios请求:vue记得引入axios

       axios.get(i, {responseType: 'blob'}).then(res=>{
           console.log(res);
           let url=URL.createObjectURL(res.data);
           console.log(url);
           const a = document.createElement('a');
           a.style.display = 'none';
           a.href = url;
           //download属性可以设置下载到本地时的文件名称,经测试并不需要加文件后缀
           a.setAttribute('download', fileName);
           document.body.appendChild(a);
           a.click();
           document.body.removeChild(a);
         //释放内存
           URL.revokeObjectURL(url);
       })

 原生请求:

    getBlob(url) {
        let xhr = new XMLHttpRequest()
        let _this = this
        xhr.open('get', url, true)
        xhr.setRequestHeader('Content-Type', `application/pdf`)
        xhr.responseType = 'blob'
        xhr.onload = function() {
            if (this.status === 200) {
            // 接受二进制文件流
            // var blob = xhr.response
            var blob = this.response
            // 下载
            _this.downloadExportFile(blob, '文件名', 'pdf')
            }
        }
        xhr.send()
    },
    downloadExportFile(blobData, fileName, fileType = 'xlsx', callback){
      fileName = fileName + '.' + fileType

      if (window.navigator.msSaveOrOpenBlob) {
        // IE浏览器下
        navigator.msSaveBlob(blobData, fileName)
      } else {
        let link = document.createElement('a')
        link.href = window.URL.createObjectURL(blobData)
        link.download = fileName
        link.click()
        window.URL.revokeObjectURL(link.href)
      }
      if (callback) {
        callback()
      }
    },

 如果有文件content:

Download(content, filename) {
    var eleLink = document.createElement('a');
    eleLink.download = filename;
    eleLink.style.display = 'none';
    // 字符内容转变成blob地址
    var blob = new Blob([content]);
    eleLink.href = URL.createObjectURL(blob);
    // 触发点击
    document.body.appendChild(eleLink);
    eleLink.click();
    document.body.removeChild(eleLink);
};

4.后端设置下载请求的响应头 Content-Disposition 强制下载

前端只需要 window.open(url) 即可在pc 直接下载
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值