当前位置:首页 > 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 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登录…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue监听实现

vue监听实现

Vue 监听实现方法 在 Vue 中可以通过多种方式实现监听数据变化或事件触发,以下是常见的几种方法: 使用 watch 选项 watch 是 Vue 提供的核心功能之一,用于观察和响应 Vue 实…

vue toast实现

vue toast实现

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