1. 场景再现

  • 当 a 标签中添加了 download 属性,想要实现下载图片时:
  • 点击 a 链接,没有进行下载,而是在 当前页面 打开了图片

2. 原因

  • <a> 有 download 属性,可以实现下载 同源文件( ip 和 端口 相同)
  • 当图片 不同源 时,点击下载,会在当前窗口直接打开图片,而不是进入下载状态

3. 解决方案(两种)

3.1 使用 target 属性,打开新页面进行下载

  • 这样可以维持当前页面状态,用户需要在新页面中保存图片

3.2 写一个点击事件,通过 canvas 方式 保存图片

<script>/*** 下载图片* @param {string} imgsrc 图片地址*/downloadIamge(imgsrc) {// 新建图片对象let image = new Image();// 解决跨域 Canvas 污染问题image.setAttribute("crossOrigin", "anonymous");// 图片加载image.onload = function() {// 新建 canvas标签let canvas = document.createElement("canvas");// 设置 canvas宽高canvas.width = image.width;canvas.height = image.height;// 添加 canvas画笔let context = canvas.getContext("2d");// 绘制图片context.drawImage(image, 0, 0, image.width, image.height);// 得到图片的 base64 编码let url = canvas.toDataURL("image/png");// 新建 a标签let a = document.createElement("a");// 新建点击事件let event = new MouseEvent("click");// 将图片的 base64 编码,设置为 a标签的地址a.href = url;// 触发点击事件a.dispatchEvent(event);};// 将图片地址 设置为 传入的参数 imgsrcimage.src = imgsrc;};/*** 下载方法* @param {string} filepath 文件地址*/downloads(filepath) {// isImageFile():自定义函数,根据*后缀*判断是否是图片if (isImageFile(filepath)){this.downloadIamge(filepath)} else {this.downloadFile(filepath)}};
</script>

利用 a 标签 实现 下载图片(不是打开)的正确姿势相关推荐

  1. 第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签...

    第三百二十五节,web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签 标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 ...

  2. html利用a标签实现下载本地的文件

    在写html页面的时候,需要在网页上提供一个下载按钮可以下载我自己电脑中的文件.我已经知道了该文件的路径,但是之前看了很多文章都没找到正确办法,一直不知道如何能够下载本地的文件,经过不断实验发现,可以 ...

  3. 在html使用a标签 直接下载图片 不通过后台实现直接下载

    由于a标签在HTML中链接图片会被识别并打开到网页上 如果想下载这个图片的话 就需要连接到后台读取文件并生成一个头信息下载.不过可以先给a标签加上一个download属性即可直接下载了. <a ...

  4. 通过a标签直接下载图片或文本文档

    a标签直接下载文件如果遇到图片或文本文档则默认会直接打开,而不是下载,可以 <a href="/uploadfolder/xxxx.txt" download="文 ...

  5. web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 需要导入模块:from scrapy.selector import HtmlXP ...

  6. 4、web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 需要导入模块:from scrapy.selector import HtmlXP ...

  7. 四 web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

    标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象 需要导入模块:from scrapy.selector import HtmlXP ...

  8. java 点击a标签下载文档_使用a标签进行下载excel文件,打开下载后的文件内容为空,这是为什么?...

    前端代码:下载 后端代码: 接口:@ApiOperation(value = "下载") @GetMapping("/down") public void do ...

  9. 前端开发:a标签实现下载功能

    应用背景 前端项目实现下载文件的功能,在后台没给我们撸接口的情况下,我们可以利用a标签实现下载功能,而且贼简单~ 实现原理 通过a标签的download的属性,将需要下载的文件放在前端项目中,然后hr ...

最新文章

  1. python打印指定行数的分割线_在Python中的分隔线上打印列表元素
  2. 数据结构C语言版之查找(折半选择快速等)
  3. MySQL InnoDB 锁表与锁行
  4. 用Java创建自己的AOP
  5. 西北大学计算机科学排名,西北大学计算机科学与信息系统Computer Science and Information Systems世界排名2020年最新排名第151-200位(QS世界排名)...
  6. 流式处理和批处理的区别
  7. Spark: Structured + hive(Jdbc方式)卡死
  8. 今日恐慌与贪婪指数为72 贪婪程度有所缓解
  9. zabbix 调用api 批量删除主机
  10. Eclipse创建子包时显示与父包是并列关系的解决方法
  11. 香烟logo设计灵感 - logo设计公司 - ci设计
  12. 达内微软mta证书有用吗_微软MTA认证含金量极高 同程同美引入MTA考试认证倍受关注...
  13. java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理
  14. 高等数学笔记-乐经良老师-第五章-积分(Ⅱ)-定积分的应用-第六节-定积分的应用
  15. 抖音创意拍摄玩法让你轻松上热门,抖音分身特效教程。
  16. 2022最新中高阶Android面试题总结,Android面试题库
  17. android 京东收货地址,手机京东商城怎么添加收货地址?
  18. Vivado关于综合(Synthesis)后存在Hold时序违例(Hold<0),但实现(Implementation)后无时序违例(hold>= 0)的问题
  19. matlab示波器图形保存,MATLAB中示波器数据的绘图与保存
  20. 主成分分析碎石图_选取公共因子时 碎石图怎么看

热门文章

  1. android学习十八(Service服务的基本用法)
  2. kelvin模型蠕变方程_基于改进Kelvin模型的三维蠕变损伤模型研究
  3. ZCMU--5193: 韩信点兵(C语言)
  4. 爬虫爬取糗事百科图片数据
  5. STM32H7系列其一
  6. Ubuntu16.04配置orb_slam2环境,orb_slam的单目数据集,单目实时运行,RGB-D数据集的运行
  7. [人工智能-综述-5]:人工智能课程学习的10大基本问题与学习方法的建议
  8. Ubuntu16.04设置root密码
  9. 力扣 779. 第K个语法符号
  10. 2020.8.3【算协集训】线性dp