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

<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实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(…

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个渐进式 JavaScript 框架,广泛用于构建用户界面。以下是 Vue 功能的常见实现方法。 数据绑定 Vue 的核心功能之一是数据绑定,通过 v-mo…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

vue实现erp

vue实现erp

Vue实现ERP系统的关键步骤 技术选型与架构设计 采用Vue 3 + TypeScript构建前端,搭配Pinia状态管理,Element Plus或Ant Design Vue作为UI框架。后端可…

vue实现cs

vue实现cs

Vue 实现 CS(Client-Side)渲染的常见方法 Vue.js 是一个用于构建用户界面的渐进式框架,默认采用客户端渲染(CSR)。以下是几种常见的实现方式: 使用 Vue CLI 创建项…