vue文件下载功能_vue实现下载功能

vue文件下载功能_vue实现下载功能vue下载文件常用的几种方式一、直接打开直接打开是指我们直接使用window.open(URL)的方法优点:简单操作缺点:没办法携带token二、我们可以自己封装一个方法,比如如下:importaxiosfrom”axios”import*asauthfrom’@/utils/auth.js’letajax=axios.create({baseURL:process.env.VUE_APP_BASE_API,timeout:100000}

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

vue下载文件常用的几种方式

一、直接打开

直接打开是指我们直接使用window.open(URL)的方法
优点:简单操作
缺点:没办法携带token

二、我们可以自己封装一个方法,比如如下:

import axios from "axios"
import * as auth from '@/utils/auth.js'

let ajax = axios.create({ 
   
    baseURL: process.env.VUE_APP_BASE_API,
    timeout: 100000
});

ajax.interceptors.request.use(config => { 
   
        config.headers = { 
   
            Authorization: auth.getToken(),
            // OrgId: auth.getUser().orgId,
            // UserId: auth.getUser().id,
        }
        return config
    },
    err => { 
   
        return Promise.reject(err)
    })

let downloadFile = async (url, formData, options) => { 
   
    await ajax.post(url, formData, { 
   responseType: 'arraybuffer'}).then(resp => download(resp, options))
}

let getFile = async (url, options) => { 
   
    await ajax.get(url, { 
   responseType: 'blob'}).then(resp => download(resp, options))
}

let download = (resp, options) => { 
   
    let blob = new Blob([resp.data], { 
   type: options.fileType ? options.fileType : 'application/octet-binary'})
    //创建下载的链接
    let href = window.URL.createObjectURL(blob)
    downloadBlob(href, options.fileName)
}

let downloadBlob = (blobUrl, fileName, revokeObjectURL) => { 
   
    let downloadElement = document.createElement('a')
    downloadElement.href = blobUrl
    //下载后文件名
    downloadElement.download = fileName
    document.body.appendChild(downloadElement)
    //点击下载
    downloadElement.click()
    //下载完成移除元素
    document.body.removeChild(downloadElement)
    if (revokeObjectURL == null || revokeObjectURL) { 
   
        //释放掉blob对象
        window.URL.revokeObjectURL(blobUrl)
    }
}

let getDownloadFileUrl = async (url, fileType) => { 
   
    let blob
    await ajax.get(url, { 
   responseType: 'blob'}).then(resp => { 
   
        blob = new Blob([resp.data], { 
   type: fileType ? fileType : 'application/octet-binary'});
    })
    return window.URL.createObjectURL(blob);
}

let getDownloadFileUrlByPost = async (url, data, fileType) => { 
   
    let blob
    await ajax.post(url, data, { 
   responseType: 'blob'}).then(resp => { 
   
        blob = new Blob([resp.data], { 
   type: fileType ? fileType : 'application/octet-binary'});
    })
    return window.URL.createObjectURL(blob);
}

let getDownloadFileBlob = async (url, fileType) => { 
   
    let blob
    await ajax.get(url, { 
   responseType: 'blob'}).then(resp => { 
   
        blob = new Blob([resp.data], { 
   type: fileType ? fileType : 'application/octet-binary'});
    })
    return blob;
}

export default { 
   
    ajax,
    downloadFile,
    getFile,
    getDownloadFileUrl,
    getDownloadFileUrlByPost,
    getDownloadFileBlob,
    downloadBlob
}

Jetbrains全家桶1年46,售后保障稳定

然后在我们调用的那个页面中直接引入使用就好啦

//先引用
import ajax from '../../utils/ajax.js'
//使用
ajax.downloadFile('URL',null,{ 
   下载的文件名称})

这样看是不是就挺容易的
希望能帮助到你

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207132.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前端调用rpc接口_api接口调用

    前端调用rpc接口_api接口调用问题背景需要根据id通过rpc调用查询具体信息,因为没有提供批量查询的接口,所以做法是挨个遍历查询,那意味着:如果有100个id,就需要顺序进行100次rpc调用,假设每次rpc接口的调用时间是50ms(这个速度很快了),那单单rpc调用就要占用5s,所以接口的响应会非常慢。下面进行优化。优化方案:方案一:让服务方提供批量查询接口,需要服务提供方配合,这里暂不采用。方案二:rpc服务的调用由顺序调用修改为并行调用,采用线程池实现rpc的并发调用。具体实现如下:1)创建线程的类public

    2022年10月11日
    3
  • 字王2012·字王回文体系列,共15款,点击浏览·字体样张

    字王2012·字王回文体系列,共15款,点击浏览·字体样张

    2021年8月18日
    64
  • Map和Set的区别_list与set的区别

    Map和Set的区别_list与set的区别目录一、简述二、Map三、Set四、Set和Map区别一、简述Set和Map主要的应用场景在于数据重组和数据储存。Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构。集合(Set):ES6新增的一种新的数据结构,类似于数组,成员唯一(内部元素没有重复的值)。且使用键对数据排序即顺序存储。Set本身是一种构造函数,用来生成Set数据结构。Set对象允许你储存任何类型的唯一值,无论是原始值或者是对象引用。二、Ma…

    2022年9月6日
    4
  • Latex 左右引号

    Latex 左右引号参考:LaTeX技巧218:LaTeX如何正确输入引号:双引号“”单引号‘’Latex左右引号在latex中加引号时,使用""的输出为两个同向的引号;正确的做法为:“Firewall”2018.2…

    2022年6月25日
    39
  • 设备驱动外传 – 虚拟总线和platform device「建议收藏」

    设备驱动外传 – 虚拟总线和platform device「建议收藏」1.总论2.系统初始化platformdevice3.驱动程序使用platformdevice   1.总论Linux-2.6.11引入了设备模型的概念,将大部分设备驱动挂载到虚拟总线上。其目的在于:1)提供友好的用户接口,用户可以在sys/bus/platform/下找到相应的驱动和设备。2)更有利于电源管理。  2

    2022年7月24日
    9
  • MYSQL中日期与字符串间的相互转换

    MYSQL中日期与字符串间的相互转换下面将讲述如何在MYSQL中把一个字符串转换成日期:背景:rq字段信息为:201009011、无需转换的:SELECT*FROMtairlist_dayWHERErq>’2010-07-31’ANDrq2、使用:DATE_FORMATSELECT*FROMtairlist_dayWHEREDATE_FORMAT(rq,’%Y-%m

    2022年6月2日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号