当前位置:首页 > 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 实现下载。

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 实现录音文件播放 准备工作 确保项目中已安装必要的依赖,如 vue-audio-recorder 或原生 Web Audio API。录音文件播放通常涉及录音、存储和播放三个核心环节。…

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sele…

vue实现盖章

vue实现盖章

Vue 实现盖章功能 在Vue中实现盖章功能通常涉及前端UI交互,通过Canvas或SVG绘制印章,并允许用户拖拽或点击放置印章。以下是具体实现方法: 使用Canvas绘制印章 通过HTML5的…

vue实现picker

vue实现picker

Vue 实现 Picker 组件的方法 在 Vue 中实现 Picker 组件可以通过多种方式完成,以下是几种常见的实现方法: 使用原生 HTML 和 CSS 实现 通过 Vue 的模板和样式绑定,…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue jwt实现

vue jwt实现

Vue JWT 实现方法 安装依赖 确保项目中安装了 jsonwebtoken(后端)和 axios(前端)。若使用 Vue 3,可搭配 vue-router 和 pinia(或 vuex)管理状态。…