最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript使用鏈接跨域下載圖片

 更新時間:2019年11月01日 08:35:36   作者:harmsworth2016  
這篇文章主要介紹了javascript使用鏈接跨域下載圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

圖片是最常見的靜態(tài)資源文件,可以從本地、外鏈獲取圖片,或者使用base64碼展示。而canvas的toDataUrl() API可以將圖片轉(zhuǎn)base64碼,然后模擬點擊事件即可下載圖片。

外鏈下載

在本地或者網(wǎng)站下載外鏈url圖片時涉及到跨域,跨域會暴露自己的隱私,瀏覽器對跨域請求進行了限制,故需要設(shè)置crossOrigin為anonymous來允許跨域,瀏覽器會為這張圖片的請求頭附帶Origin信息,告訴靜態(tài)資源服務(wù)器,請在響應(yīng)頭中附帶Access-Control-Allow-Methods、Access-Control-Allow-Origin,以便瀏覽器放行。

代碼示例如下

eventEmitter.js

/*
 * 事件觸發(fā)器
 * @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 './common/eventEmitter'
// 圖片下載對象
let downloadedImg = null
// 待下載文件名
let fileName = null

// 監(jiān)聽是否獲取圖片地址
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標(biāo)簽?zāi)M下載
 * @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.com/imgextra/i2/54199406/O1CN012JLzreAxzn1xhNP_!!54199406.jpg', '測試')

注意

若有跨域的錯誤提示出現(xiàn),則需后臺服務(wù)器進行跨域設(shè)置。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

昌吉市| 茶陵县| 都昌县| 松阳县| 延安市| 金坛市| 阳谷县| 永福县| 武定县| 彭阳县| 昌江| 遵化市| 金坛市| 东丽区| 任丘市| 乡宁县| 台北市| 泾源县| 阳西县| 京山县| 泰安市| 庐江县| 奉贤区| 滦平县| 蓬安县| 永川市| 茂名市| 麻城市| 伊宁县| 凤阳县| 马鞍山市| 游戏| 会宁县| 东兰县| 溧水县| 岳阳县| 泊头市| 定远县| 新竹县| 太谷县| 沅陵县|