讲师中心 微信公众号
AI工具推荐 视频效率加速

如何通过前端一键下载远程生成的二维码图片

云辰君_6027

云辰君_6027

发布时间:2026-01-06 22:34:01

|

631人浏览过

|

来源于php中文网

原创

如何通过前端一键下载远程生成的二维码图片

本文介绍如何使用纯 javascript 实现点击按钮即下载指定 url 的二维码图片(如 quickchart 生成的 qr 图像),无需后端介入,全程在浏览器中完成。

在 Web 开发中,经常需要将动态生成的二维码(例如通过 QuickChart.io 等服务)直接提供给用户下载。由于该二维码是通过 URL 动态渲染的 PNG 图像(如 https://www.php.cn/link/4fd76758ca20a054063d174c3cd7f394/qr?text=...),我们无法直接用 链接触发下载——因为跨域资源或服务端未设置 Content-Disposition: attachment 时,浏览器会拒绝强制下载。

✅ 推荐方案:使用 fetch + Blob + 动态 标签
这是现代浏览器(Chrome/Firefox/Safari/Edge ≥ 2020)广泛支持的标准方式,安全、简洁、无需 PHP 后端中转:

<button id="downloadBtn">? 下载二维码</button>

<script>
document.getElementById('downloadBtn').addEventListener('click', async () => {
  const qrUrl = 'https://www.php.cn/link/4fd76758ca20a054063d174c3cd7f394/qr?text=http://tapo.app&dark=000&light=fff&ecLevel=H&margin=1&size=500&centerImageSizeRatio=0.4&centerImageUrl=https://app.tapo.app/Logo-Big.png';

  try {
    const response = await fetch(qrUrl);
    if (!response.ok) throw new Error(`HTTP ${response.status}: ${response.statusText}`);

    const blob = await response.blob();
    const url = URL.createObjectURL(blob);

    const a = document.createElement('a');
    a.href = url;
    a.download = 'tapo-qr-code.png'; // 自定义文件名(扩展名建议与 MIME 类型匹配)
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(url); // 及时释放内存引用
  } catch (err) {
    console.error('下载失败:', err);
    alert('二维码下载失败,请检查网络或稍后重试。');
  }
});
</script>

? 关键说明:

  • ✅ URL 编码已修正:原问题中 URL 包含错误的 ¢erImageSizeRatio(应为 centerImageSizeRatio),代码中已使用正确参数拼写;
  • ✅ a.download 兼容性良好:现代浏览器均支持,但注意:若 fetch 返回的是跨域资源,需确保服务端响应头包含 Access-Control-Allow-Origin: *(QuickChart 默认支持 CORS);
  • ⚠️ 不支持 IE11:如需兼容旧版浏览器,需降级为 PHP 代理方案(服务端 file_get_contents() + header('Content-Disposition: attachment')),但本例推荐优先使用纯前端方案;
  • ? 文件名建议:a.download 值应包含 .png 扩展名,便于系统识别类型;若需根据内容自动推断,可读取 blob.type(如 'image/png')并映射扩展名。

? 进阶提示:你还可以将此逻辑封装为复用函数,支持任意图片 URL:

HISUI 前端框架开发指南(IRIS版)
HISUI 前端框架开发指南(IRIS版)

HISUI 前端框架基础开发指南。HISUI 是基于 easyui 二次开发的 jQuery UI 组件库,专为医疗信息系统设计。当涉及 HISUI 组件开发、jQuery easyui 表格/表单/布局/窗口、医疗系统前端页面编写时使用此 skill。 涵盖 40 个组件的官方文档参考,支持声明式与编程式两种初始化方式,提供 $cm/$m 数据访问方法。

下载
function downloadImage(url, filename = 'image.png') {
  fetch(url).then(r => r.blob()).then(blob => {
    const a = Object.assign(document.createElement('a'), {
      href: URL.createObjectURL(blob),
      download: filename,
    });
    document.body.append(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(a.href);
  });
}
// 调用:downloadImage(qrUrl, 'tapo-qr.png');

综上,仅需几行 JavaScript 即可实现一键下载远程二维码图片,高效、轻量、符合现代 Web 最佳实践。

立即学习“前端免费学习笔记(深入)”;

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2926

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5999

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

4287

2026.03.24

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

3122

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2974

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

3312

2025.04.24

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5530

2024.08.16

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

2987

2023.10.09

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn