前端图片下载
时间:2022-07-25
本文章向大家介绍前端图片下载,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
2020-09-25 16:08:19
问题概要
前段时间遇到一个功能,挺简单,下载附件。自己也觉得很简单,于是开开心心写下了如下代码:
<a href="文件地址" download >文件名称</a>
然后放到在测试的时候自信的点了一下,然后不开心了,图片直接被打开了,根本没有下载,但是有的是可以下载的,很奇怪。
问题原因
经过仔细分析发现,当文件地址和当前页面同源时可以正常下载,当非同源时就下载失败了。
解决办法
既然找到了问题所在,那么解决起来就很方便了,之前我写过一篇文章,是通过服务器中转的方式来实现的,将非同源的文件转成同源,于是就可以下载了:传送门。
如果不经过后台,直接通过前端来实现,也有相应的方法,我们来看一下:
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();
}
缺陷:这种方法需要图片服务器允许跨域才可能实现。
通过后台中转的方式就无需特殊条件,只不过增加了服务器的流量及带宽。
所以,如何取舍还看自身条件来选择合适的方式来实现即可。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kafka集群搭建
- Kafka的实现细节
- CentOS7下安装Elasticsearch-7.3.2和Elasticsearch-head
- spring boot oauth2 取消认证
- 日志级别记录规范
- 搭建K8S集群之node节点部署
- ent orm笔记2---schema使用(上)
- ent orm笔记4---Code Generation
- 什么?明明是2020年12月30日显示2021年12月30日?
- JDK1.8HashMap源码学习-数据结构
- JDK1.8HashMap源码学习-初始化
- JDK1.8HashMap源码学习-put操作以及扩容(一)
- 数据科学家极力推荐核心计算工具-Numpy的前世今生(上)
- 什么是运维眼中可部署的软件架构
- 2020-09-03:裸写算法:回形矩阵遍历。