当前位置:首页 > VUE

vue 实现下载图片

2026-02-21 07:27:25VUE

使用 <a> 标签下载图片

通过动态创建 <a> 标签并设置 download 属性实现下载。这种方式适用于已知图片 URL 且同源的情况:

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

<script>
export default {
  methods: {
    downloadImage() {
      const link = document.createElement('a')
      link.href = '图片URL'
      link.download = 'filename.jpg' // 设置下载文件名
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link)
    }
  }
}
</script>

通过 Canvas 处理跨域图片

当图片存在跨域问题时,可以通过 Canvas 中转处理:

<script>
export default {
  methods: {
    async downloadCrossOriginImage() {
      const image = new Image()
      image.crossOrigin = 'Anonymous'
      image.src = '跨域图片URL'

      await new Promise((resolve) => {
        image.onload = resolve
      })

      const canvas = document.createElement('canvas')
      canvas.width = image.width
      canvas.height = image.height
      const ctx = canvas.getContext('2d')
      ctx.drawImage(image, 0, 0)

      canvas.toBlob((blob) => {
        const url = URL.createObjectURL(blob)
        const link = document.createElement('a')
        link.href = url
        link.download = 'image.png'
        link.click()
        URL.revokeObjectURL(url)
      })
    }
  }
}
</script>

使用 axios 下载二进制图片数据

适用于需要通过 API 获取图片数据的场景:

<script>
import axios from 'axios'

export default {
  methods: {
    async downloadImageFromAPI() {
      try {
        const response = await axios.get('API_URL', {
          responseType: 'blob'
        })

        const url = window.URL.createObjectURL(new Blob([response.data]))
        const link = document.createElement('a')
        link.href = url
        link.setAttribute('download', 'image.jpg')
        document.body.appendChild(link)
        link.click()
        link.remove()
        URL.revokeObjectURL(url)
      } catch (error) {
        console.error('下载失败:', error)
      }
    }
  }
}
</script>

处理 Base64 格式图片

当图片数据是 Base64 格式时:

<script>
export default {
  methods: {
    downloadBase64Image(base64Data, filename) {
      const link = document.createElement('a')
      link.href = base64Data
      link.download = filename
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link)
    }
  }
}
</script>

注意事项

  • 跨域图片需要服务器配置 CORS 头部
  • 部分浏览器可能限制自动下载行为
  • 移动端浏览器可能有不同的处理方式
  • 大文件下载建议显示进度提示
  • 下载文件名中文可能需要额外编码处理

vue 实现下载图片

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

相关文章

vue实现闪烁

vue实现闪烁

Vue实现元素闪烁效果 使用CSS动画实现 通过Vue绑定class结合CSS动画实现闪烁效果,代码简洁且性能较好。 <template> <div :class="{…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <…

vue实现tap

vue实现tap

Vue 实现 Tap 事件 在移动端开发中,Tap 事件比 Click 事件更常用,因为 Click 事件有 300ms 延迟。以下是几种在 Vue 中实现 Tap 事件的方法。 使用第三方库 安装…

vue 实现分屏

vue 实现分屏

Vue 实现分屏的方法 使用 CSS Flexbox 或 Grid 布局 通过 CSS Flexbox 或 Grid 布局可以轻松实现分屏效果。在 Vue 组件中定义两个或多个区域,并使用 CSS 控…