当前位置:首页 > VUE

vue 实现下载图片

2026-02-21 07:27:25VUE

使用 <a> 标签下载图片

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

vue 实现下载图片

<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 中转处理:

vue 实现下载图片

<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 中实现积分功能通常涉及前端展示、交互逻辑以及与后端 API 的通信。以下是常见的实现方法和步骤: 积分展示组件 创建一个积分展示组件,用于显示当前用户的积分。可以使…

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue 实现级联

vue 实现级联

Vue 实现级联选择器 级联选择器(Cascader)常用于省市区选择、分类选择等场景。Vue 中可以通过 Element UI、Ant Design Vue 等 UI 库实现,也可以手动封装。 使…

vue实现动画

vue实现动画

Vue 实现动画的方法 Vue 提供了多种方式来实现动画效果,包括内置的过渡系统、第三方动画库以及直接操作 CSS 或 JavaScript 动画。 使用 Vue 内置过渡系统 Vue 的 <…

vue实现视频

vue实现视频

Vue 实现视频播放的方法 在 Vue 项目中实现视频播放可以通过多种方式完成,以下是几种常见的方法: 使用 HTML5 的 <video> 标签 在 Vue 组件中直接使用 HTML…

vue实现treeview

vue实现treeview

Vue 实现 TreeView 的方法 使用递归组件实现 TreeView 递归组件是 Vue 中实现 TreeView 的常见方式。通过组件调用自身,可以轻松处理嵌套的树形结构数据。 <te…