前端下载文件

news2024/11/15 19:41:28

前端可以通过使用 JavaScript中的 fetch 或者 XMLHttpRequest 来下载文件;

  1. 使用fetch进行文件下载;
fetch('http://example.com/file.pdf')
  .then(response => response.blob())
  .then(blob => {
    // 创建一个临时的URL对象
    const url = window.URL.createObjectURL(blob);
    // ...
 });
  1. 使用XMLHttpRequest进行文件下载;
const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/file.pdf', true);
xhr.responseType = 'blob';

xhr.onload = function() {
  if (xhr.status === 200) {
    // 获取服务器返回的blob数据
    const blob = xhr.response;

    // 创建一个临时的URL对象
    const url = window.URL.createObjectURL(blob);
	// ...
  }
};

xhr.send();

上面两种方法均只展示到了创建临时的URL对象,临时URL可以视作下载链接,点击a标签,href指向URL,下载即可成功;
那创建了临时URL对象之后,该如何操作,这里用一个实例来说明:

// 调用createDownloadUrl函数
// data表示下载接口返回的数据流
this.createDownloadUrl(data, 'application/xml', file_name);
// createDownloadUrl函数
// 第1个参数表示数据流
// 第2个参数表示待下载文件的类型
// 第3个参数表示待下载文件的名称
createDownloadUrl(data: any, type: string, templateName: string) {
	const blob = new Blob([data], {
		type,
	});
	
	// 创建临时的URL对象
	const url = URL.createObjectURL(blob);
	this.downloadFileByUrl(url, templateName);
}



downloadFileByUrl(url: string, templateName: string) {
	// 创建一个隐藏的<a>标签,设置其href属性为临时URL
	const templateDownlod = document.createElement('a');
	
	const isSafariBrowser =
	  navigator.userAgent.indexOf('Safari') !== -1 &&
	  navigator.userAgent.indexOf('Chrome') === -1;
	
	if (isSafariBrowser) {
	  templateDownlod.setAttribute('target', '_blank');
	}
	
	templateDownlod.setAttribute('href', url);
	templateDownlod.setAttribute('download', templateName); // 设置下载的文件名
	templateDownlod.style.visibility = 'hidden';
	document.body.appendChild(templateDownlod);
	templateDownlod.click();
	
	// 清理临时的URL对象
	URL.revokeObjectURL(url);
	// 移除a标签
	document.body.removeChild(templateDownlod);
}

下载展示结果:
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

0101docker mysql8镜像主从复制-运维-mysql

1 概述 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 Mysql支持一台主库同时向多台从库进行复制&#xff0c;从库同时可以…

“精准学习嵌入式开发:明确目标,提升技能“

嵌入式领域涵盖广泛&#xff0c;不可能一次性掌握所有知识。因此&#xff0c;明确学习目标和方向非常重要。选择感兴趣且与职业发展相关的领域进行深入学习是明智之举。 嵌入式技术在不断发展&#xff0c;过去与现在存在差异。选择学习当前行业的主流技术和趋势是明智选择。掌…

【Linux进程篇】进程概念(2)

【Linux进程篇】进程概念&#xff08;2&#xff09; 目录 【Linux进程篇】进程概念&#xff08;2&#xff09;进程状态Linux对进程的说法linux中的信号 进程状态查看Z(zombie)——僵尸进程僵尸进程的危害 孤儿进程 进程优先级基本概念查看系统进程PRI &#xff08;优先级priori…

MyCat概述

1.MyCat概述 MyCat是阿里巴巴的产品&#xff0c;他是开源的、基于Java语言编写的MySQL数据库中间件。可以像使用mysql一样来使用mycat&#xff0c;对于开发人员来说根本感觉不到mycat的存在。 MyCat下载地址&#xff1a;http://dl.mycat.org.cn/ MyCat官网&#xff1a;http:/…

Django入门 - 路由Route的基本使用

文章目录 1. 直接访问视图函数&#xff0c;没有使用子路由2. 使用子路由 urls.py 我们一般叫它根路由 1. 直接访问视图函数&#xff0c;没有使用子路由 MyDjangoPro2\views.py 代码 from django.shortcuts import renderfrom django.http import HttpResponse# 视图函数Views …

Minio使用及整合起步依赖

说明&#xff1a;Minio是开源的对象存储服务器&#xff0c;相当于免费版的OSS&#xff0c;本文介绍在Linux环境下部署Minio服务器&#xff0c;并在SpringBoot中使用&#xff0c;最后将Minio的代码打包成一个起步依赖。 安装&启动 第一步&#xff1a;下载 首先&#xff0…

使用vue-grid-layout时 You may need an appropriate loader to handle this file type.

使用vue-grid-layout时 You may need an appropriate loader to handle this file type. node版本不匹配 我的node v14.16.0 vue-gride-layout 需要用 v 2.3.7的版本 卸载后重新安装即可

诺瓦星云面试汇总

1、C语言向一个内存地址写值&#xff0c; int main() {int value 42;int *ptr (int *)0x12345678; // Replace with the desired memory address*ptr value 2、申请释放内存 申请内存int *dynamicArray (int*)malloc(size *sizeof(int));释放内存 free(dynamicArray)…

哪些国家可以申请访问学者?

根据知识人网的小编了解&#xff0c;许多国家都允许外国学者申请访问并参与学术交流。这些国家提供了丰富多样的研究机会&#xff0c;有助于促进全球学术合作与知识交流。以下是一些允许申请访问学者的国家&#xff1a; 1. 美国&#xff1a;作为全球科研领域的重要一员&#xf…

远景智能PMO负责人严晓婷受邀为第十二届中国PMO大会演讲嘉宾

上海远景科创智能科技有限公司PMO负责人严晓婷女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;能源物联网产品标准项目和非标准项目的并行管理。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1…

《合成孔径雷达成像算法与实现》Figure3.6

代码复现如下&#xff1a; clc clear all close all%参数设置 TBP 100; %时间带宽积 T 10e-6; %脉冲持续时间%参数计算 B TBP/T; …

【回眸】AurixTC397的MPS8875A开发之展频篇

目录 前言 【回眸】AurixTC397的MPS8875A开发之展频篇 知识储备 看懂芯片手册 调整寄存器写入值 修改写入寄存器代码 修改主函数代码 验证和测量 前言 因公需要&#xff0c;大半年来一直对AurixTC397进行开发。实物板子特别大&#xff0c;有很多很多芯片&#xff0c;具…

2023-08-09 ssh-add id_rsa 提示Permissions 0777 for ‘id_rsa‘ are too open

一、ssh-add id_rsa 提示Permissions 0777 for id_rsa are too open Permissions 0777 for id_rsa are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.二、意思是说公钥文件权限太宽了&#xff0c;需…

【校招VIP】java语言考点之基本数据类型

考点介绍&#xff1a; 基本数据类型的长度、自动升级、JVM存储和封装类的相关考点&#xff0c;是校招常见考点。基础考点不能出错 一、考点题目 1、JAVA 中的几种基本数据类型是什么&#xff0c;各自占用多少字节解答&#xff1a;先了解2个单词先&#xff1a;1、bit --位&am…

Kubernetes集群部署 集群网络未部署

环境 > 192.168.50.53 k8s-master > 192.168.50.51 k8s-node1 > 192.168.50.50 k8s-node2 必须不能少于两核两G 所有主机共同操作 主机初始化配置 所有主机配置禁用防火墙和selinux [rootserver ~]# setenforce 0 [rootserver ~]# iptables -F [rootserver ~]…

form中表单切换,导致 relus 中的事件无法触发,原因:页面切换不要一直切换DOM,会导致问题,需要都显示出来

修改前&#xff0c;因为重复渲染DOM导致绑定rules失效 修改前代码使用 computed 计算出渲染的DOM&#xff0c;影响rules事件<el-formref"form"inline:model"billDetailCopy":rules"rules"size"small"label-position"right&quo…

使用无监督机器学习进行客户细分 -- 机器学习项目基础篇(11)

在今天的时代&#xff0c;公司努力工作&#xff0c;使他们的客户满意。他们推出新的技术和服务&#xff0c;以便客户可以更多地使用他们的产品。他们试图与每一个客户保持联系&#xff0c;以便他们能够相应地提供货物。但实际上&#xff0c;与每个人保持联系非常困难和不现实。…

Springboot项目集成Durid数据源和P6Spy以及dbType not support问题

项目开发阶段&#xff0c;mybatis的SQL打印有占位符&#xff0c;调试起来还是有点麻烦&#xff0c;随想整合P6Spy打印可以直接执行的SQL&#xff0c;方便调试&#xff0c;用的Durid连接池。 Springboot项目集成Durid <dependency><groupId>com.alibaba</group…

【Matlab】极限学习机遗传算法(ELM-GA)函数极值寻优——非线性函数求极值

往期博客&#x1f449; 【Matlab】BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值 【Matlab】GRNN神经网络遗传算法(GRNN-GA)函数极值寻优——非线性函数求极值 【Matlab】RBF神经网络遗传算法(RBF-GA)函数极值寻优——非线性函数求极值 【Matlab】Elman神经网络遗…

栈和队列 (以及实现)

文章内容 1.栈 2.队列 文章内容 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last I…