当前位置:首页 > VUE

vue实现下载图片

2026-01-20 00:09:19VUE

使用 a 标签下载图片

在 Vue 中可以通过动态创建 a 标签实现图片下载。获取图片的 URL 后,设置 a 标签的 hrefdownload 属性,触发点击事件。

<template>
  <button @click="downloadImage">下载图片</button>
</template>

<script>
export default {
  methods: {
    downloadImage() {
      const imageUrl = 'https://example.com/image.jpg';
      const link = document.createElement('a');
      link.href = imageUrl;
      link.download = 'image.jpg';
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
    }
  }
};
</script>

使用 fetchBlob 处理跨域图片

如果图片存在跨域问题,可以通过 fetch 获取图片数据,转换为 Blob 对象后再下载。

<template>
  <button @click="downloadImageWithFetch">下载跨域图片</button>
</template>

<script>
export default {
  methods: {
    async downloadImageWithFetch() {
      const imageUrl = 'https://example.com/image.jpg';
      const response = await fetch(imageUrl);
      const blob = await response.blob();
      const url = window.URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = url;
      link.download = 'image.jpg';
      document.body.appendChild(link);
      link.click();
      window.URL.revokeObjectURL(url);
      document.body.removeChild(link);
    }
  }
};
</script>

使用第三方库 file-saver

通过 file-saver 库可以简化下载流程,支持更复杂的文件类型处理。

安装依赖:

npm install file-saver

代码示例:

<template>
  <button @click="downloadWithFileSaver">使用file-saver下载</button>
</template>

<script>
import { saveAs } from 'file-saver';

export default {
  methods: {
    async downloadWithFileSaver() {
      const imageUrl = 'https://example.com/image.jpg';
      const response = await fetch(imageUrl);
      const blob = await response.blob();
      saveAs(blob, 'image.jpg');
    }
  }
};
</script>

处理 Base64 格式图片

如果图片是 Base64 格式,可以直接转换为 Blob 并下载。

vue实现下载图片

<template>
  <button @click="downloadBase64Image">下载Base64图片</button>
</template>

<script>
export default {
  methods: {
    downloadBase64Image() {
      const base64Data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABA...';
      const byteString = atob(base64Data.split(',')[1]);
      const mimeType = base64Data.split(',')[0].split(':')[1].split(';')[0];
      const ab = new ArrayBuffer(byteString.length);
      const ia = new Uint8Array(ab);
      for (let i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
      }
      const blob = new Blob([ab], { type: mimeType });
      const url = window.URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = url;
      link.download = 'image.jpg';
      document.body.appendChild(link);
      link.click();
      window.URL.revokeObjectURL(url);
      document.body.removeChild(link);
    }
  }
};
</script>

注意事项

  • 跨域图片需要服务器配置 Access-Control-Allow-Origin 头部。
  • 动态创建的 a 标签需要手动移除,避免内存泄漏。
  • 使用 file-saver 时需确保浏览器支持 BlobURL.createObjectURL

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

相关文章

vue实现防抖节流

vue实现防抖节流

Vue 中实现防抖(Debounce) 防抖的核心是延迟执行函数,在连续触发时取消前一次的调用,只执行最后一次。适用于输入框搜索、窗口大小调整等场景。 方法1:使用 Lodash 的 _.debou…

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const Bas…

vue实现异步

vue实现异步

Vue 实现异步操作的常见方法 Vue 提供了多种方式来处理异步操作,包括数据获取、事件处理等场景。 使用 async/await 在 Vue 方法中可以直接使用 async/await 语法处理异…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue toast实现

vue toast实现

Vue Toast 实现方法 使用第三方库(推荐) 安装 vue-toastification 库,这是一个功能丰富且轻量级的 Vue Toast 插件。 npm install vue-toast…

vue实现select

vue实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过多种方式完成,以下是几种常见的方法: 使用原生 HTML select 元素 原生 HTML 的 <sel…