文件下载方法(直接下载与请求下载)

news/2024/11/5 14:26:21/文章来源:https://www.cnblogs.com/Simoon/p/18527783

 

直接下载:适用于简单场景,不发送请求直接使用浏览器获取文件

/*** @description: 下载图片/文件* @return {*}*/
export const download = (url = '', newUrl) => {const iframe = document.createElement('a');if (newUrl) {iframe.href = newUrl;} else {iframe.href = (window.DCIMAPP.downloadPrefix || '') + url;}iframe.download = document.cookie ? document.cookie.split('; ') : [];document.querySelector('body').appendChild(iframe);iframe.click();document.querySelector('body').removeChild(iframe);
};

 

发送请求get/post:适合复杂的下载场景

export const filterexport = ({url = '', params, fun,method="post"}) => {function getFileName(fileName, response) {// 需要响应设置此header暴露给外部,才能获取到let contentDisposition = response.headers['content-disposition'];if (contentDisposition) {// 正则获取filename的值let filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;let matches = filenameRegex.exec(contentDisposition);if (matches != null && matches[1]) {fileName = matches[1].replace(/['"]/g, '');}// 通过 URLEncoder.encodeURIComponent(pFileName, StandardCharsets.UTF_8.name()) 加密编码的, 使用decodeURIComponent(fileName) 解密//   fileName = decodeURIComponent(fileName)// 通过 new String(pFileName.getBytes(), StandardCharsets.ISO_8859_1) 加密编码的, 使用decodeURIComponent(escape(fileName)) 解密var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串if (userAgent.indexOf('Safari') > -1 && userAgent.indexOf('Chrome') == -1) {return fileName;}fileName = decodeURIComponent(escape(fileName));}return fileName;}let useUrl = '';// iframe.href = (window.DCIMAPP.downloadPrefix || '') + url;useUrl = (window.DCIMAPP.downloadPrefix || '') + url;if (useUrl[0] == '/') useUrl = useUrl.substr(1);axios({url: window.DCIMAPP.bpmDomain + useUrl,method: method,formateResponse: () => {return false;},handleResponse: (res, code, response) => {return response;},responseType: 'blob',data: params,}).then((res) => {if (res.data.type.split('/')[1] == 'json') {const reader = new FileReader();reader.readAsText(res.data, 'utf-8');reader.onload = () => {res = JSON.parse(reader.result);if (res.code && res.code !== 100000) {prompt.warn(res.msg);}};return;} else if (fun && res.data) {fun();prompt.success(intl.get('7d372ced-178d-485c-a1b1-3538c51700db').d('导出成功'));}const iframe = document.createElement('a');let url = window.URL.createObjectURL(new Blob([res.data]));let fileName = '';fileName = getFileName(fileName, res);iframe.download = fileName;iframe.href = url;document.querySelector('body').appendChild(iframe);iframe.click();document.querySelector('body').removeChild(iframe);});
};

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11.9

[实验任务一]:女娲造人 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。 实验要求:画出对应的类图;提交源代码;package uml;// Per…

IT监控(进阶篇):运维监控系统手把手部署教学

前言: 注:系统需必须是centos7.4-7.9或redhat7.4-7.9且无其他业务的,不存在nginx、php、mysql、perseusZ_server、ansibles、postgresql等软件,否则一些脚本探测到已安装则会跳过配置文件的修改导致后续安装的系统功能异常。 top #查看系统配置最低要求CPU8核心以上,内存8…

RocketMQ实现优惠券秒杀

RocketMQ实现优惠券秒杀的简单思路秒杀架构图准备数据库 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;-- ---------------------------- -- Table structure for goods -- ---------------------------- DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` (`id` int(11…

2024.11.5 人工智能在小学教育教学中的应用

【知识小课堂1】概念与历史 人工智能(Artificial Intelligence),引文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 (一)学科范畴 人工智能是一门边沿学科,属于自然科学、社会科学、技术科学三向交叉学科。 (二)涉及…

S7-1200对V90 PN进行位置控制的三种方法

S7-1200系列PLC通过PROFINET与V90 PN伺服驱动器搭配进行位置控制,实现的方法主要有以下三种: • 方法一、在PLC中组态位置轴工艺对象,V90使用标准报文3,通过MC_Power、MC_MoveAbsolute等PLC Open标准程序块进行控制, 这种控制方式属于中央控制方式(位置控制在PLC中计算,驱…

11.5 人工智能学习内容

人工智能(Artificial Intel ligence) 引文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 (一)学科范畴 人工智能是一门边沿学科,属于自然科学、社会科学、技术科学三向交叉学科。 (二)涉及学科与领域 哲学和认…

Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解

title: Nuxt.js 应用中的 nitro:build:public-assets 事件钩子详解 date: 2024/11/5 updated: 2024/11/5 author: cmdragon excerpt: nitro:build:public-assets 是 Nuxt 3 中的一个生命周期钩子,在复制公共资产之后调用。该钩子使开发者能够在构建 Nitro 服务器之前,对公…

FB284功能说明

FB284功能说明带增量编码器V90,使用参考挡块+编码器零脉冲方式回零时,参考挡块回零开关接到哪里,怎样配置 回零开关连接到一个PLC的数字量输入点,PLC内编程将其状态关联到FB284功能块ConfigEPos输入引脚的bit6。 (1)将V90参数P29240设置为1(选择参考挡块+零脉冲方式回零)…

《图解设计模式》 第九部分 避免浪费

第二十章 Flyweight 模式public class BigcharFactory{//这里对使用到的内容进行了缓存private HashMap pool = new HashMap();//有则直接取,无则创建并保存到缓存。public synchronized BigChar getBigChar(char charname){BigChar bc = (BigChar) pool.get("" + c…

黑马PM-电商项目-订单管理

支付管理订单管理订单统计评价管理

记录一下从keil官网下载DFP(芯片支持包)的方法

1.打开官网 www.keil.arm.com2.点击右上角的下载按钮,进入下一页面3.选择MDK-ARM会进入到MDK下载页面。 这里我们不用下载MDK。4.选择左下角的芯片列表按钮5.选择我们使用的芯片(我这里使用的是STM32L051系列)6.然后选择DFP7.在右上角选择下载DFP文件