前端下载图片、pdf、excel、world文件;前端下载图片和pdf文件;前端a标签下载图片和pdf文件;下载文件名称不生效原因。

参考文章1
参考文章2

以下的下载是,拿到了后端给的下载图片的接口地址url

在这里插入图片描述

> 方法1:将文本或者JS字符串通过 Blob 转换成二进制下载

优点:可以下载,也可以保存名称。

//文件流参数和图片名称
function downloadTxt(str, filename){let a = document.createElement('a')a.download = filenamea.style.display = 'none'let blob = new Blob([str])a.href = URL.createObjectURL(blob)document.body.appendChild(a)a.dispatchEvent(new MouseEvent('click'))document.body.removeChild(a)
}

> 方法2:原生的下载方法

优点:可以下载,也可以保存名称。 推荐!!!!

    downLoadFileImg (fileUrl, fileName) {// fileUrl -- 后端下载地址 可能是拼接了文件id, fileName -- 下载文件名称// 可以下载 没名称// location.href = fileUrl// 可以下载 但是名称设置无效// let a = document.createElement('a')// a.download = fileName// a.href = fileUrl// a.dispatchEvent(new MouseEvent('click'))// 名称设置有效但是下载文件打不开// // let a = document.createElement('a')// // a.download = fileName //图片名称// // a.style.display = 'none'// // let blob = new Blob([fileUrl]) //图片地址// // a.href = URL.createObjectURL(blob)// // document.body.appendChild(a)// // a.dispatchEvent(new MouseEvent('click'))// // document.body.removeChild(a)// 会打开新的页面下载 但是没名称// const newWindow = window.open()// newWindow.document.write(//   '<iframe width="100%" height="100%" src="' + fileUrl +//   '" frameborder="0" allowfullscreen></iframe>'// )// newWindow.document.title = fileName// 可下载,名称也有效 -- 推荐const x = new window.XMLHttpRequest()x.open('GET', fileUrl, true)x.responseType = 'blob'x.onload = () => {const url = window.URL.createObjectURL(x.response)const a = document.createElement('a')a.href = urla.download = fileNamea.click()}x.send()},

> 方法3:a标签下载

a标签html5版本新增了download属性,用来告诉浏览器下载该url,而不是导航到它,可以带属性值,用来作为保存文件时的文件名,尽管说有同源限制,但是我实际测试时非同源的也是可以下载的。

对于没有设置Content-Disposition响应头或者设置为inline的图片来说,因为图片对于浏览器来说是属于能打开的文件,所以并不会触发下载,而是直接打开,浏览器不能预览的文件无论有没有Content-Disposition头都会触发保存:
其中:href是下载地址,download是下载名称;
href 的下载地址 和 当前网站地址 必须是 同源的否则download名称不生效

<a href="../../static/demo.jpg" download="demo.jpg" target="_blank">demo.jpg</a>
<!-- 直接打开 -->
<a href="/test.jpg" download="test.jpg" target="_blank">jpg静态资源</a>
<!-- 触发保存 -->
<a href="/test.zip" download="test.pdf" target="_blank">zip静态资源</a>
<!-- 触发保存 -->
<a href="https://www.7-zip.org/a/7z1900-x64.exe" download="test.zip" target="_blank">三方exe静态资源</a>
<!-- 直接打开 -->
<a href="/createQrCode?text=http://lxqnsys.com/" download target="_blank">二维码流</a>
<!-- 直接打开 -->
<a href="/getFileStream?name=test.jpg" download target="_blank">jpg流</a>
<!-- 触发保存 -->
<a href="/getFileStream?name=test.zip" download target="_blank">zip流</a>
<!-- 触发保存 -->
<a href="/getAttachmentFileStream?name=test.jpg" download target="_blank">附件jpg流</a>
<!-- 触发保存 -->
<a href="/getAttachmentFileStream?name=test.zip" download target="_blank">附件zip流</a>

方法4:a标签方式类似的还可以使用location.href

这2、3种方式的缺点也很明显,一是不支持post等其他方式的请求,二是需要后端支持

location.href = '/test.jpg'

还有其他的下载方式可以参考原文链接!

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

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

相关文章

Redis安装和使用指南

From: http://mwt198668.blog.163.com/blog/static/48803692201132141755962/ Redis安装指南 作者&#xff1a;Red_Ant 时间&#xff1a;2011-04-20 简 介 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string…

员工打卡课后小项目

public class Fm{//员工类public string Id { get; set; }public string Name { get; set; }public int Age { get; set; }public string Gender { get; set; }} public class SI{//打卡类public string Name { get; set; }public DateTime Begin { get; set; }public DateTime…

通过后端接口,预览文件流图片;预览和下载文件流

后端接口返回的是文件流 1.如果是pdf等文件&#xff0c;通过iframe结合文件流&#xff0c;做到文件的下载和预览 // 预览文件openPdf1 () {// 后端下载文件流的地址接口let url G_CGI_PHP.group.documentDownload ?id this.paymentImage1const newWindow window.open()ne…

DatePicker动态设置picker-options 中的disabledDate属性操作;

一、场景&#xff1a; 有两个时间选择器A和B。A的时间任意选&#xff0c;B的时间必须选择A之后的时间。此时就需要给B设置可选时间区间&#xff0c;而且是动态的值&#xff0c;既动态设置picker-options 中的disabledDate。 二、代码片段 html&#xff1a; <el-col :span&…

[转]序列化悍将Protobuf-Net,入门动手实录

最近在研究web api 2&#xff0c;看了一篇文章&#xff0c;讲解如何提升性能的&#xff0c; 在序列化速度的跑分中&#xff0c;Protobuf一骑绝尘&#xff0c;序列化速度快&#xff0c;性能强&#xff0c;体积小&#xff0c;所以打算了解下这个利器 1&#xff1a;安装篇 谷歌官方…

Linux 内核打印级别

printk的打印级别 #define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "<2>" /* critical conditions */ #define KERN_ERR "…

C# 文件操作详解(三)---------Directory类

前面两篇介绍了File类和FileInfo类&#xff0c;对于文件的操作基本够用&#xff0c;但是后面还会补充一下FileStream相关的操作&#xff0c;例如StreamReader和StreamWriter的内容。本文主要介绍Directory类的使用&#xff0c;让我们一起看一下Directory类为我们提供了哪些操作…

Libusb开发教程一 安装

1. 从官网下载需要使用的离线资源包&#xff1a; 进入 libusb.info 的 Download 页 下载 libusb-1.0.9.tar.bz2 下载 libusb-compat-0.1.4.tar.bz2 2. 实验平台 OS: Ubuntu16.04 Kernel: 4.4.0 3. 安装过程 <1> 拷贝步骤一中的离线包到 Linux 系统目录&#xff0c;一般…

WIN10解包分区和磁盘分区教程

From: https://thinkpad.bbs.taobao.com/detail.html?postId5390151 新机到手第一件事情就是要系统解包和磁盘分区。建议在安装和卸载软件之前&#xff0c;进行磁盘分区&#xff0c;不然有可能只能分出原空间的50%&#xff0c;想要分更多空间&#xff0c;只能还原系统了。 一、…

element自定义图标;element自定义icon;element-ui自定义tab栏图标;

一、场景&#xff1a;element-ui本身提供了图标&#xff0c;但是不全面或者开发时候需要使用自定义图标展示。此时可以用到elemenUi的自定义图标。参考链接 二、html使用&#xff0c;和正常的element的 图标 i 标签使用一样&#xff0c;使用设置的类名class即可&#xff1a; &…

canvas文字居中;canvas画布文字右对齐;canvas画布文字左对齐;canvas文字自动换行;canvas设置行间距;

canvas参考手册 场景&#xff1a;画布绘制文本&#xff0c;使用 context.fillText(text,x,y,maxWidth)。文本对其也就是设置xy坐标问题。 以下的画布设定宽度假设都是width&#xff1a;500 一、canvas文本左对齐&#xff1a; 就是x轴设置为0即可。 var cdocument.getElementBy…

与朱元思书

风烟俱净&#xff0c;天山共色。从流飘荡&#xff0c;任意东西。自富阳至桐庐一百许里&#xff0c;奇山异水&#xff0c;天下独绝。 水皆缥碧&#xff0c;千丈见底。游鱼细石&#xff0c;直视无碍。急湍甚箭&#xff0c;猛浪若奔。 夹岸高山&#xff0c;皆生寒树&#xff0c;负…

el-cascader回显失败;el-cascader回显不出来

—我的是省市联动&#xff0c;选择时候是正常的&#xff0c;得到的绑定值是数组 [‘安徽’,‘黄山’]&#xff0c;没问题&#xff1b; 但是在详情查看时候&#xff0c;回显成[‘安徽’,‘黄山’]&#xff0c;下拉框却不显示回显值。 —原因&#xff1a;虽然data里初始化声明变量…

No grammar constraints (DTD or XML schema).....两种解决方法

From: http://www.cnblogs.com/yqskj/archive/2013/01/11/2857065.html 方法一&#xff1a;常用方法 关闭XML验证 工具栏&#xff1a;windows > preferences > xml > xml files > validation > Indicate when no grammar is specified:选择Ignore即可。 方法二…

数字金额加逗号;js给数字加三位一逗号间隔的两种方法;js数据格式化

需求&#xff1a;数字金额&#xff0c;按照三位一个逗号显示。既 千 百万 十亿 或者是按照固定的几位一个逗号展示。 方法1&#xff1a; <script type "text/javascript">//保留三位小数&#xff0c;toLocaleString() 方法可把一个 Number 对象转换为本地格…

项目管理软件伙伴https://www.huobanyun.cn/

现在项目管理软件市面上很多&#xff0c;但能够完全适合每家公司需求的比较难找&#xff0c;因为众口难调&#xff0c;每家公司都有自己的特殊情况&#xff0c;所以&#xff0c;建议考虑下有比较齐全的基础功能的标准化软件产品&#xff0c;同时又在项目管理开发能力上比较突出…

eclipse配置

eclipse 算是跨平台的开发工具了&#xff0c;而且使用的人群很多&#xff0c;虽然网上有很多答案&#xff0c;但我还是想整理下自己的答案&#xff0c;方便日后查询&#xff1a; 1. 编码设置 2. 解决No grammar constraints (DTD or XML schema) 3. [WARNING] Using platform …

el-form表单新增表单项动态校验;el-form校验动态表单v-if不生效;

场景&#xff1a;本文是两种表单校验 1.对于数组for循环&#xff0c;校验每一项 2.对于两个不同的字段&#xff0c;分别v-if显示隐藏的校验 一、新增和删除表单项&#xff0c;动态校验。 el-form表单动态动态新增表单进行校验。直接参考 动态增减表单项 以下代码可直接复制&…

MT7628如何控制GPIO

查看datasheet和确认GPIO复用引脚scheme 通过查看mt7628 datasheet可以明确复用关系&#xff1a; 在这里我以I2S对应的GPIO引脚为例。 查看 mt7628an.dtsi 文件中对gpio的注册 $(TOPDIR)假定为宿主机上 OpenWrt 的编译目录。 在$(TOPDIR)/target/linux/ramips/dts/mt7628an.d…

.Net Core集成Office Web Apps(一)

最近开始学习.Net Core&#xff0c;并使用Visual Studio Code工具来开发。感觉开发起来特别的方便&#xff0c;但是有个头疼的地方&#xff1a;许多的类库被修改了&#xff0c;一时半会儿还熟悉不了&#xff0c;需要查阅官方API。。。 Microsoft Office Web Apps&#xff08;以…