https://blog.csdn.net/i_am_a_div/article/details/125050379

https://blog.csdn.net/moguzhale/article/details/107704621?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165390015016782425114724%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165390015016782425114724&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-107704621-null-null.142%5Ev11%5Epc_search_result_control_group,157%5Ev12%5Econtrol&utm_term=%E5%89%8D%E7%AB%AF%E5%9B%BE%E7%89%87%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187

https://blog.csdn.net/snsHL9db69ccu1aIKl9r/article/details/119362095?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%89%8D%E7%AB%AF%E5%9B%BE%E7%89%87%E4%B8%8B%E8%BD%BD&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-119362095.142%5Ev11%5Epc_search_result_control_group,157%5Ev12%5Econtrol&spm=1018.2226.3001.4187

参考文章1参考文章2
以下的下载是,拿到了后端给的下载图片的接口地址url

> 方法1:将文本或者JS字符串通过 Blob 转换成二进制下载
优点:可以下载,也可以保存名称。
//文件流参数和图片名称function downloadTxt(str, filename){    let a = document.createElement('a')    a.download = filename    a.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)}
123456789101112> 方法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 = url        a.download = fileName        a.click()      }      x.send()
    },123456789101112131415161718192021222324252627282930313233343536373839404142434445> 方法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>1<!-- 直接打开 --><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>12345678910111213141516方法4:a标签方式类似的还可以使用location.href
这2、3种方式的缺点也很明显,一是不支持post等其他方式的请求,二是需要后端支持
location.href = '/test.jpg'1还有其他的下载方式可以参考原文链接!————————————————版权声明:本文为CSDN博主「i_am_a_div_日积月累_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/i_am_a_div/article/details/125050379

前端下载图片、pdf、excel、world文件;前端下载图片和pdf文件;前端a标签下载图片和pdf文件;下载文件名称不生效原因的更多相关文章

  1. c# 图片插入Excel

    引用COM:Microsoft Office 11.0 Object Library 引用类:    using System;    using System.Windows.Forms;    u ...

  2. 如何使用JavaScript实现前端导入和导出excel文件

    一.SpreadJS 简介 SpreadJS 是一款基于 HTML5 的纯 JavaScript 电子表格和网格功能控件,以“高速低耗.纯前端.零依赖”为产品特色,可嵌入任何操作系统,同时满足 .NE ...

  3. 提高工作效率的神器:基于前端表格实现Chrome Excel扩展插件

    Chrome插件,官方名称extensions(扩展程序):为了方便理解,以下都称为插件. 我们开发的插件需要在浏览器里面运行,打开浏览器,通过右上角的三个点(自定义及控制)-更多工具-拓展程序-打开 ...

  4. angular2/angular4 如何通过$http的post方法请求下载二进制的Excel文件

    时间有限,废话就不多说了,直接上干货! 下面给大家介绍一下我遇到的一个坑,如果你也遇到了,那恭喜你,你一定能找到答案:angular2/angular4 如何通过$http的post方法请求下载二进制 ...

  5. ASP.NET Core 2.1以上 Bootstrap 4前端模板文件,开发环境与发布环境前端模板 environment的使用

    笔者的前端文件如下 笔者增加Bootstrap 4 和 FontAwersome(字体图标),因为Bootsrap 4已经不再包含图标了. ASp.Net Core 中,通常在 _Layout.csh ...

  6. 文件断点上传,html5实现前端,java实现服务器

    断点上传能够防止意外情况导致上传一半的文件下次上传时还要从头下载,网上有很多关于断点的实现,这篇文章只是从前到后完整的记录下一个可用的实例,由于生产环境要求不高,而且就是提供给一两个人用,所以我简化了 ...

  7. WordPress 前端投稿/编辑发表文章插件 DJD Site Post(支持游客和已注册用户)汉化版 免费下载

    插件简介 前面逍遥乐给大家推荐了 WordPress用户前端化专业版WP User Frontend Pro WordPress中文汉化插件v2.1.9 今天逍遥乐给大家带来的wordpress插件是 ...

  8. 导出带图片的Excel——OOXML文件分析

    需求: 普通js导出文件excel具有兼容性问题,通过js-xsl导出文件API未找到导出图片的方案,实例过少,因此针对07年后以.xlsx后缀的excel文件,通过修改后缀.zip参考文件模板来实现 ...

  9. JSP下载txt 和 Excel两种文件

    JSP下载txt 和 Excel两种文件 jsp 下载txt文件和excel文件   jsp 下载txt文件和excel文件 最近做了个用jsp下载的页面 将代码贴出来 权作记录吧 1 下载txt文件 ...

  10. Apache 后台服务器(主要处理php及一些功能请求 如:中文url)   Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求)   Lighttpd 图片服务器   总体来说,随着nginx功能得完善将使他成为今后web server得主流。

    Apache 后台服务器(主要处理php及一些功能请求 如:中文url) Nginx 前端服务器(利用它占用系统资源少得优势来处理静态页面大量请求) Lighttpd 图片服务器 总体来说,随着ngi ...

随机推荐

  1. 1_使用swiper数组对象循环图片遇到的问题

    今天在练习微信小程序的swiper组件时,想用列表循环出图片,发现图片一直没出来,控制台也没有报错,后来仔细一看,原来是语法格式写错了. 以下是我列表循环踩过的坑: 一:微信小程序的列表循环和vue的 ...

  2. 从开发属于你自己的第一个 Python 库,做一名真正的程序员「双语版」

    你好,我是悦创.之前我在 CSDN 编写了一篇开发 Python 库的教程,有人加我提问到的一些问题,我来更新一下这篇文章:https://blog.csdn.net/qq_33254766/arti ...

  3. A排列方案

    递归实现排列型枚举 把 1∼n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序. 输入格式 一个整数 n. 输出格式 按照从小到大的顺序输出所有方案,每行 1 个. 首先,同一行相邻两个数用 ...

  4. SSM框架——整合ssm

    SSM整合 1.准备工作 新建一个普通的Maven项目 建好所有需要的架构层 向pom.xml中导入所有的依赖 <!--MyBatis相关--> <dependency> &l ...

  5. P7076 [CSP-S2020] 动物园

    题面 动物园里饲养了很多动物,饲养员小 A 会根据饲养动物的情况,按照<饲养指南>购买不同种类的饲料,并将购买清单发给采购员小 B. 具体而言,动物世界里存在 \(2^k\) 种不同的动物 ...

  6. pytest框架的简介

    概念:是一款基于python语言的单元测试框架 用途:用于发现测试用例.执行测试用例.判断测试结果.生成测试报告的一款框架 测试用例的规则: 测试文件必须与test开头,或_test结尾 类文件必须T ...

  7. 刺激,线程池的一个BUG直接把CPU干到100%了。

    你好呀,我是歪歪. 给大家分享一个关于 ScheduledExecutorService 线程池的 BUG 啊,这个 BUG 能直接把 CPU 给飚到 100%,希望大家永远踩不到. 但是,u1s1, ...

  8. 垃圾收集器必问系列—CMS

    本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 应该相信,自己是生活的战胜者.--雨果 目录 CMS简介 运作过程 CMS的缺陷 处理器 ...

  9. 结构型模式 - 组合模式Composite Pattern

    学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 组合模式的定义与特点  组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式, ...

  10. Java8Stream流2

    上期对stream流大致总结了一下,后面又做了一些练习,大家可以参考一下. 首先需要建一个 Product的实体类,后面会用到 @Data @AllArgsConstructor @NoArgsCon ...