当前位置:首页 > VUE

vue实现下载图片

2026-02-20 16:10:18VUE

使用 <a> 标签下载图片

通过动态创建 <a> 标签并设置 download 属性实现下载。需注意跨域图片需服务端支持或使用代理。

// 方法封装
function downloadImage(url, filename) {
  const a = document.createElement('a');
  a.href = url;
  a.download = filename || 'image.jpg';
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
}

// Vue中调用
this.downloadImage('https://example.com/image.jpg', 'my-image.jpg');

通过 Canvas 处理跨域图片

若图片跨域且无法修改服务端配置,可通过 Canvas 转换后下载。需确保图片允许跨域访问(crossOrigin 属性)。

function downloadCrossOriginImage(url, filename) {
  const img = new Image();
  img.crossOrigin = 'Anonymous';
  img.onload = () => {
    const canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    const ctx = canvas.getContext('2d');
    ctx.drawImage(img, 0, 0);
    canvas.toBlob((blob) => {
      const blobUrl = URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = blobUrl;
      a.download = filename || 'image.png';
      a.click();
      URL.revokeObjectURL(blobUrl);
    }, 'image/png');
  };
  img.src = url;
}

使用 Axios 下载二进制图片

适用于需要添加请求头或处理鉴权的场景,通过将响应数据转为 Blob 实现下载。

vue实现下载图片

import axios from 'axios';

async function downloadWithAxios(url, filename) {
  try {
    const response = await axios.get(url, {
      responseType: 'blob',
      headers: { Authorization: 'Bearer xxx' } // 可选请求头
    });
    const blobUrl = URL.createObjectURL(response.data);
    const a = document.createElement('a');
    a.href = blobUrl;
    a.download = filename || 'image.jpg';
    a.click();
    URL.revokeObjectURL(blobUrl);
  } catch (error) {
    console.error('下载失败:', error);
  }
}

注意事项

  • 跨域限制:直接下载跨域图片可能失败,需服务端设置 Access-Control-Allow-Origin 或使用代理。
  • 文件名后缀:确保 download 属性中的文件名包含正确后缀(如 .jpg, .png)。
  • Blob 内存释放:通过 URL.revokeObjectURL() 释放创建的 Blob URL 避免内存泄漏。

以上方法可根据实际场景选择,普通下载推荐第一种,复杂场景(如鉴权、跨域)推荐第三种。

标签: 下载图片vue
分享给朋友:

相关文章

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…

vue实现录像

vue实现录像

Vue 实现录像功能 在 Vue 中实现录像功能通常需要借助浏览器的 MediaDevices API 和 MediaRecorder API。以下是实现步骤: 获取用户摄像头和麦克风权限 使用 n…

vue实现京东

vue实现京东

Vue 实现京东电商网站的关键步骤 项目搭建与基础配置 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态。配置基础 UI 框架如 E…

vue实现增删

vue实现增删

Vue 实现增删功能 在 Vue 中实现增删功能通常涉及数据绑定、事件处理和列表渲染。以下是基于 Vue 2 或 Vue 3 的实现方法: 数据定义 初始化一个数组用于存储列表数据,并在 Vue 实…

vue实现翻页

vue实现翻页

Vue实现翻页功能 在Vue中实现翻页功能通常需要结合分页组件和数据请求逻辑。以下是常见的实现方法: 使用Element UI分页组件 安装Element UI后,可以直接使用其分页组件:…