【vue】vue中下载文件的方法

news2025/1/21 3:01:13

文章目录

    • 1. 下载后端返回文件
      • 1.1 后端为post请求返回二进制流文件
        • URL.createObjectURL
        • FileReader
      • 1.2 后端直接返回get请求文件
    • 2. 下载本地文件

1. 下载后端返回文件

1.1 后端为post请求返回二进制流文件

Blob

Blob对象标识一个不可变、原始数据的类文件对象。Blob表示的不一定是JavaScript原生格式的数据

responseType

responseType它表示服务器响应的数据类型,由于后台返回来的是二进制数据,所以要把它设为‘blob’

通过设置responseType为blob,可以直接拿到二进制文件转化为Blob,两种使用 Blob 实现文件下载的方式

URL.createObjectURL

在浏览器端,实现直接下载文件,就是使用a标签来只想文件的下载地址。window.location.href的本质也是这样,因此在拿到二进制文件对应的Blob对象后,需要为这个Blob对象创建一个指向它的下载地址的URL

URL.createObjectURL 方法则可以实现接收 File 或 Blob 对象,创建一个 DOMString,包含了对应的 URL,指向 Blob 或 File 对象,它看起来会是这样:

“blob:http://localhost:8080/a48aa254-866e-4c66-ba79-ae71cf5c1cb3”

完整使用:

export const downloadFile = (fileStream, name, extension, type = "") => {
  const blob = new Blob([fileStream], {type});
  const fileName = `${name}.${extension}`;
  if ("download" in document.createElement("a")) {
    const elink = document.createElement("a");
    elink.download = fileName;
    elink.style.display = "none";
    elink.href = URL.createObjectURL(blob);
    document.body.appendChild(elink);
    elink.click();
    URL.revokeObjectURL(elink.href);
    document.body.removeChild(elink);
  } else {
    navigator.msSaveBlob(blob, fileName);
  }
};

FileReader

FileReader 对象也可以使得我们对 Blob 对象生成一个下载地址 URL,它和 URL.createObject 一样可以接收 File 或 Blob 对象。
这个过程,主要由两个函数完成readAsDataURLonload,前者用于将Blob或File对象转为对应的URL,后者用于接收前者完成后的URL,它会在e.target.result
完整使用:

const readBlob2Url  =  (blob, type) =>{
  return new Promise(resolve => {
    const reader = new FileReader()
    reader.onload = (e) => {
      resolve(e.target.result)
    }
    reader.readAsDataURL(blob)
  })
}

1.2 后端直接返回get请求文件

<a href=‘get请求返回的地址’></a>

2. 下载本地文件

前端项目中下载某个地址的文件模块,文件不想放到后端去下载,在文件大小不太大的情况下,可以把文件放在前端项目中,无论开发环境还是生产环境,都能在同样路径下找到那个文件
1.在vue-cli3.x的版本中,将需要下载的文件放到public文件夹中
在这里插入图片描述
2.下载文件

<script>
downloadUrl: `${process.env.BASE_URL}file/xxx_template.xlsx`, // 模板下载文件地址
</script>
<template>
<a :href="downloadUrl">点击下载</a>
</template>

参考:
详解,从后端导出文件到前端(Blob)下载过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/414427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ( 发布订阅模式 ==> FanoutExchange )

本章目录&#xff1a; 何为发布订阅模式FanoutExchange具体使用一、何为发布订阅模式 在上一篇文章中&#xff0c;我们创建了Work Queue并且发送任务&#xff0c;在Work Queue中&#xff0c;每个任务只会被一个消费者消费&#xff0c;任务消费后就被清除了。 而在本篇中&…

0202心跳和服务续约源码解析-nacos2.x-微服务架构

文章目录1 客户端心跳任务2 服务端处理2.1 服务注册时开启客户端心跳检查2.2 客户端发送心跳任务续约2.3 服务实例移除2.4 心跳任务闭环结语1 客户端心跳任务 在上一篇文章0201服务注册源码解析-nacos2.x-微服务架构分析客户端服务注册的时候&#xff0c;流程在NacosNamingSer…

重装系统下载网址

[置顶]无论会不会安装系统&#xff0c;都一定会需要&#xff0c;觉得内容不错欢迎一键三连哦 稳定 | 方便 | 好用 1、MSDN 用过最简单好用&#xff0c;下载不限速&#xff0c;支持迅雷、IDM多种下载方式 https://www.xitongku.com 2、Windows系统下载仓储站 为小白重装系统提供…

KIOPTRIX: LEVEL 4通关详解

环境配置 vulnhub上下载的文件没有vmx 去3的文件里偷一个 记事本打开把所有Kioptrix3_vmware改成Kioptrix4_vmware 然后网卡地址随便改一下 打开后会提示找不到虚拟机,手动选一下就行了 信息收集 漏洞发现 web一上去就是一个登录框 扫路径发现database.sql 但是密码是错的…

高通开发系列 - linux arm64 toolchain交叉编译器编译错误

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述下载aarch64交叉编译器编译使能编译环境使能defconfig编译问题1:address-of-packed-member问题2:attribute-alias=问题3:array…

Kubernetes 笔记(14)— 滚动更新、定义应用版本、实现应用更新、管理应用更新、添加更新描述

滚动更新&#xff0c;使用 kubectl rollout 实现用户无感知的应用升级和降级。 1. 定义应用版本 在 Kubernetes 里&#xff0c;版本更新使用的不是 API 对象&#xff0c;而是两个命令&#xff1a;kubectl apply 和 kubectl rollout&#xff0c;当然它们也要搭配部署应用所需要…

人工智能作业之遗传算法

遗传算法1.遗传算法定义2.相关术语3.遗传算法的主要步骤4.遗传算法的参数设计原则5.代码实现1.遗传算法定义 遗传算法&#xff08;Genetic Algorithm, GA&#xff09;起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法&am…

java 婚恋交友网站Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 婚恋交友网站是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

IMX6ULL学习笔记(22)——eLCDIF接口使用(TFT-LCD屏显示)

一、TFT-LCD简介 TFT-LCD&#xff08;Thin Film Transistor-Liquid Crystal Display&#xff09; 即薄膜晶体管液晶显示器。TFT-LCD 与无源 TN-LCD、 STN-LCD 的简单矩阵不同&#xff0c;它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管&#xff08;TFT&#xff09;&#…

智慧网点解决方案 | 助推银行“营销-销售-服务”一体化建设

传统网点的智慧化变革已成为新形势下银行创新业务服务模式与产品、优化客户体验、提质增效的一大阵地。如何在网点转型过程中充分发挥边缘计算等新技术的价值&#xff0c;引领行业数字化转型新趋势&#xff0c;成为银行业面临的共同课题。 在传统银行网点向智慧网点的转型过程…

基于Java+SpringBoot+vue的家具销售电商平台设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战 &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例&#xff08;300套&#xff09; 目录 一、效果演示 二、…

真00后整顿职场?公司新来了个00后卷王,3个月薪资干到20K.....

最近聊到软件测试的行业内卷&#xff0c;越来越多的转行和大学生进入测试行业。想要获得更好的待遇和机会&#xff0c;不断提升自己的技能栈成了测试老人迫在眉睫的问题。 不论是面试哪个级别的测试工程师&#xff0c;面试官都会问一句“会编程吗&#xff1f;有没有自动化测试…

Redis基础总结-redis简介

Redis基础Redis基础目标&#xff1a;1. Redis 简介1.1 NoSQL概念1.1.1 问题现象1.1.2 NoSQL的概念1.2 Redis概念1.2.1 redis概念1.2.2 redis的应用场景1.3 Redis 的下载与安装1.3.1 Redis 的下载与安装1.4 Redis服务器启动1.4.1 Redis服务器启动1.4.2 Redis客户端启动1.4.3 Red…

数字化转型迫在眉睫!药企如何应用AI技术加速创新?

导语 | 近年来&#xff0c;随着 AI 等技术的发展应用&#xff0c;数字化、智能化日渐成为各行各业转型升级的新兴力量&#xff0c;其与医药产业的融合创新也逐渐成为当前的新趋势&#xff0c;众多医药制造企业蓄势待发&#xff0c;搭乘数字化的快车&#xff0c;驶入高速发展的快…

论文笔记:Fully Convolutional Networks for Semantic Segmentation

摘要 卷积网络是产生特征层次结构的强大视觉模型。我们展示了卷积网络本身&#xff0c;经过端到端、像素到像素的训练&#xff0c;超过了语义分割的最新技术水平。我们的主要见解是构建“全卷积”网络&#xff0c;该网络接受任意大小的输入并通过有效的推理和学习产生相应大小…

css的font-size属性、line-height属性、height属性

目录 一&#xff0c;字体框 二、font-size属性 三、line-height属性 四、line-height和font-size的联系 简介&#xff1a;font-size是css中关于字体的样式属性&#xff0c;注意与文本属性text-xxx进行区别。因为文本由一个个字符组成&#xff0c;所以字体属性也会对文本属性…

海伦司的酒何时“醒”

被年轻人喝出来的“酒馆第一股”海伦司&#xff0c;目前正经历疯狂开店之后的阵痛。 3月24日&#xff0c;海伦司国际控股有限公司(下称“海伦司”,09869.HK)发布了2022年的业绩报告。 海伦司是一家连锁酒馆品牌&#xff0c;其年报公布后的首个交易日&#xff0c;其股价跌幅达…

Qt5.12實戰之Qt調用Linux靜態庫(.a)與動態庫(.so)

1.準備編譯好的靜態庫&#xff0c;複製到lib目錄 &#xff0c;動態庫複製到bin目錄 2.創建Qt控制臺應用&#xff0c;並添加靜態庫引用 右擊工程名call_liba,選擇添加擴展庫 選擇要添加的libtest.a 然後 點擊 OPEN 點擊Next後會自動添加靜態庫相關引用 到工程 的.pro文件 中 生…

OpenCV实例(五)指纹识别

OpenCV实例&#xff08;五&#xff09;指纹识别1.指纹识别概述1.1概述1.2原理2.指纹识别算法2.1特征提取2.2MCC匹配方法2.3尺度不变特征变换&#xff08;SIFT&#xff09;3.显示指纹的关键点4.基于SIFT的指纹识别作者&#xff1a;Xiou 1.指纹识别概述 1.1概述 指纹识别&…

程序设计方法学

体育竞技分析 问题分析 体育竞技分析 需求&#xff1a;毫厘是多少&#xff1f; 如何科学分析体育竞技比赛&#xff1f; 输入&#xff1a;球员的水平 输出&#xff1a;可预测的比赛成绩 体育竞技分析&#xff1a;模拟N场比赛 计算思维&#xff1a;抽象 自动化 模拟&am…