javascript使用链接跨域下载图片
网络编程 2021-07-04 15:01www.168986.cn编程入门
这篇文章主要介绍了javascript使用链接跨域下载图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
前言
图片是最常见的静态资源文件,可以从本地、外链获取图片,或者使用base64码展示。而canvas的toDataUrl() API可以将图片转base64码,然后模拟点击事件即可下载图片。
外链下载
在本地或者网站下载外链url图片时涉及到跨域,跨域会暴露自己的隐私,浏览器对跨域请求进行了限制,故需要设置crossOrigin为anonymous来允许跨域,浏览器会为这张图片的请求头附带Origin信息,告诉静态资源服务器,请在响应头中附带Aess-Control-Allow-Methods、Aess-Control-Allow-Origin,以便浏览器放行。
代码示例如下
eventEmitter.js
/ 事件触发器 @Author: wujiang @Date: 2018-11-11 22:50:43 @Last Modified by: wujiang @Last Modified time: 2018-11-11 23:39:40 / const EventEmitter = require('events') class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter() export default myEmitter
backend.js
import eventEmitter from './mon/eventEmitter' // 图片下载对象 let downloadedImg = null // 待下载文件名 let fileName = null // 监听是否获取图片地址 eventEmitter.addListener('getHref', href => { imatateDownloadByA(href, fileName) }) / base64下载图片(可跨域) @param {} img @param {String} filename 文件名 / function downloadImg (imgUrl, filename) { fileName = filename startDownloadImg(imgUrl, getImgDataUrl) } / 开始下载图片之前 @param {String} imgUrl @param {Function} callback / function startDownloadImg (imgUrl, callback) { let imageURL = imgUrl downloadedImg = new Image() downloadedImg.crossOrigin = 'Anonymous' downloadedImg.src = imageURL downloadedImg.addEventListener('load', callback, false) } / 获取图片下载base64字符串 @param {DOMimg} domimg / function getImgDataUrl () { const canvas = document.createElement('canvas') const context = canvas.getContext('2d') const width = downloadedImg.width || downloadedImg.naturalWidth const height = downloadedImg.height || downloadedImg.naturalHeight const imgSrc = downloadedImg.src let type = imgSrc.substring(imgSrc.lastIndexOf('.') + 1) let dtype = type === 'jpg' ? 'jpeg' : 'png' canvas.width = width canvas.height = height context.drawImage(downloadedImg, 0, 0) eventEmitter.emit('getHref', canvas.toDataURL(`image/${dtype}`)) } / 通过a标签模拟下载 @param {String} href @param {String} filename / function imatateDownloadByA (href, filename) { const a = document.createElement('a') a.download = filename a.style.display = 'none' a.href = href document.body.appendChild(a) a.click() a.remove() window.URL.revokeObjectURL(href) } downloadImg('https://img.alicdn./imgextra/i2/54199406/O1CN012JLzreAxzn1xhNP_!!54199406.jpg', '测试')
注意
若有跨域的错误提示出现,则需后台服务器进行跨域设置。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南