news 2026/5/10 9:40:53

前端下载图片

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端下载图片

前端下载图片有很多种方式,取决于你的场景(直接下载、跨域、base64、canvas等)。我给你整理几种常见方案👇


✅ 1. 直接用<a download>(最简单)

适用于:同源图片 或 已允许跨域的图片

function downloadImage(url, filename = 'image.jpg') { const a = document.createElement('a'); a.href = url; a.download = filename; a.click();}

👉 注意:

•如果是跨域图片,服务器必须允许(Access-Control-Allow-Origin)•否则会变成“打开图片”而不是下载


✅ 2. fetch + blob(推荐通用方案)

适用于:跨域下载(前提是服务器允许 CORS)

async function downloadImage(url, filename = 'image.jpg') { const res = await fetch(url); const blob = await res.blob(); const blobUrl = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = blobUrl; a.download = filename; a.click(); URL.revokeObjectURL(blobUrl);}

👉 优点:

•可控性强•可以做 loading / 进度 / 错误处理


✅ 3. base64 下载

适用于:你已经拿到 base64 数据

function downloadBase64(base64, filename = 'image.png') { const a = document.createElement('a'); a.href = base64; a.download = filename; a.click();}

✅ 4. canvas 转图片下载(常用于截图/处理后下载)

function downloadCanvas(canvas, filename = 'image.png') { const url = canvas.toDataURL('image/png'); const a = document.createElement('a'); a.href = url; a.download = filename; a.click();}

👉 注意:

•canvas 如果画了跨域图片且未设置 crossOrigin,会报错(tainted canvas)


✅ 5. 解决跨域图片无法下载(关键点🔥)

如果你遇到这种问题:

图片可以显示,但下载失败 / 变成打开新窗口

解决方案:

✔️ 方法1:后端代理(最稳)

让后端去请求图片,再返回给前端

前端 -> 你的服务器 -> 图片服务器

✔️ 方法2:设置 crossOrigin

const img = new Image();img.crossOrigin = 'anonymous';img.src = url;

⚠️ 前提:图片服务器必须支持 CORS


✅ 6. 批量下载(进阶)

async function batchDownload(urls) { for (let i = 0; i < urls.length; i++) { await downloadImage(urls[i], `image_${i}.jpg`); }}

👉 注意浏览器限制(同时下载过多会被拦截)


🚀 总结(选型建议)

场景

推荐方案

普通图片

<a download>

跨域图片

fetch + blob

base64

直接下载

canvas生成

toDataURL

强制稳定

后端代理


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 20:57:39

TP-Link TL-WDR5620路由器无线桥接实战:从零搭建稳定双频网络

1. 为什么你需要无线桥接&#xff1f; 家里总有几个角落WiFi信号弱得让人抓狂&#xff1f;刷个视频卡成PPT&#xff0c;打游戏延迟高到被队友骂&#xff1f;TP-Link TL-WDR5620的无线桥接功能就是你的救星。这个功能相当于给主路由器找了个"信号中继站"&#xff0c;…

作者头像 李华
网站建设 2026/4/17 15:24:56

保姆级教程:在PVE 8.0上配置NAT网络,让内网虚拟机也能安全上网

PVE 8.0 NAT网络配置实战&#xff1a;内网虚拟机安全上网指南 家里只有一根宽带&#xff0c;却想在PVE上跑多个虚拟机&#xff1f;担心内网服务暴露在公网有风险&#xff1f;今天我们就来彻底解决这个痛点。不同于常见的桥接模式&#xff0c;NAT配置能让你的虚拟机既安全上网&a…

作者头像 李华
网站建设 2026/4/17 11:06:10

期货缠论实战:文华财经笔中枢指标公式解析与博易大师应用指南

1. 缠论笔中枢指标的核心逻辑 期货交易中的缠论笔中枢指标&#xff0c;本质上是通过数学公式对价格波动进行结构化处理。这个指标的核心在于识别市场中的"笔"和"中枢"&#xff0c;这是缠论中最基础的两个概念。笔是由连续的同向K线组成的线段&#xff0c;而…

作者头像 李华