前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端图片下载

前端图片下载

作者头像
OECOM
发布2020-09-27 15:05:57
1.2K0
发布2020-09-27 15:05:57
举报
文章被收录于专栏:OECOMOECOM

2020-09-25 16:08:19

问题概要

前段时间遇到一个功能,挺简单,下载附件。自己也觉得很简单,于是开开心心写下了如下代码:

代码语言:javascript
复制
<a href="文件地址" download >文件名称</a>

然后放到在测试的时候自信的点了一下,然后不开心了,图片直接被打开了,根本没有下载,但是有的是可以下载的,很奇怪。

问题原因

经过仔细分析发现,当文件地址和当前页面同源时可以正常下载,当非同源时就下载失败了。

解决办法

既然找到了问题所在,那么解决起来就很方便了,之前我写过一篇文章,是通过服务器中转的方式来实现的,将非同源的文件转成同源,于是就可以下载了:传送门

如果不经过后台,直接通过前端来实现,也有相应的方法,我们来看一下:

代码语言:javascript
复制
downloadImg(src,name){
    console.log(src)
    var x=new XMLHttpRequest();
    //禁止浏览器缓存;否则会报跨域的错误
    x.open("GET", src+'?t='+new Date().getTime(), true);
    x.responseType = 'blob';
    x.onload=function(e){
      var url = window.URL.createObjectURL(x.response)
      var a = document.createElement('a');
      a.href = url
      a.download = name
      a.click()
    }
    x.send();
  }

缺陷:这种方法需要图片服务器允许跨域才可能实现。

通过后台中转的方式就无需特殊条件,只不过增加了服务器的流量及带宽。

所以,如何取舍还看自身条件来选择合适的方式来实现即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题概要
  • 问题原因
  • 解决办法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档