当前位置:首页 > 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 对象后再下载。

vue实现下载图片

<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 库可以简化下载流程,支持更复杂的文件类型处理。

安装依赖:

vue实现下载图片

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 并下载。

<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页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用i…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 me…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keywor…

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogres…

vue实现打印二维码

vue实现打印二维码

安装二维码生成库 使用 qrcode 或 vue-qrcode 库生成二维码。通过 npm 安装: npm install qrcode vue-qrcode 生成二维码 在 Vue 组件中引…

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…