怎么在javascript中利用链接跨域下载图片

本篇文章为大家展示了怎么在javascript中利用链接跨域下载图片,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在本地或者网站下载外链url图片时涉及到跨域,跨域会暴露自己的隐私,浏览器对跨域请求进行了限制,故需要设置crossOrigin为anonymous来允许跨域,浏览器会为这张图片的请求头附带Origin信息,告诉静态资源服务器,请在响应头中附带Access-Control-Allow-Methods、Access-Control-Allow-Origin,以便浏览器放行。

代码示例如下

eventEmitter.js

/*
*事件触发器
*@Author:wujiang
*@Date:2018-11-1122:50:43
*@LastModifiedby:wujiang
*@LastModifiedtime:2018-11-1123:39:40
*/
constEventEmitter=require('events')
classMyEmitterextendsEventEmitter{}

constmyEmitter=newMyEmitter()

exportdefaultmyEmitter

backend.js

importeventEmitterfrom'./common/eventEmitter'
//图片下载对象
letdownloadedImg=null
//待下载文件名
letfileName=null

//监听是否获取图片地址
eventEmitter.addListener('getHref',href=>{
imatateDownloadByA(href,fileName)
})

/**
*base64下载图片(可跨域)
*@param{*}img
*@param{String}filename文件名
*/
functiondownloadImg(imgUrl,filename){
fileName=filename
startDownloadImg(imgUrl,getImgDataUrl)
}

/**
*开始下载图片之前
*@param{String}imgUrl
*@param{Function}callback
*/
functionstartDownloadImg(imgUrl,callback){
letimageURL=imgUrl
downloadedImg=newImage()
downloadedImg.crossOrigin='Anonymous'
downloadedImg.src=imageURL
downloadedImg.addEventListener('load',callback,false)
}

/**
*获取图片下载base64字符串
*@param{DOMimg}domimg
*/
functiongetImgDataUrl(){
constcanvas=document.createElement('canvas')
constcontext=canvas.getContext('2d')
constwidth=downloadedImg.width||downloadedImg.naturalWidth
constheight=downloadedImg.height||downloadedImg.naturalHeight
constimgSrc=downloadedImg.src
lettype=imgSrc.substring(imgSrc.lastIndexOf('.')+1)
letdtype=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
*/
functionimatateDownloadByA(href,filename){
consta=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.com/imgextra/i2/54199406/O1CN012JLzreAxzn1xhNP_!!54199406.jpg','测试')

注意

若有跨域的错误提示出现,则需后台服务器进行跨域设置。

怎么在javascript中利用链接跨域下载图片

上述内容就是怎么在javascript中利用链接跨域下载图片,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注恰卡编程网行业资讯频道。

发布于 2021-03-24 01:22:18
收藏
分享
海报
0 条评论
162
上一篇:利用zrender.js怎么绘制一个体温单 下一篇:怎么在vue中利用vee-validator实现表单校验
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码