You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js项目从assets下载Excel文件报错,求可行解决方案

Vue.js 项目中 Excel 文件下载问题的解决办法

常见报错原因

直接用相对路径引用assets目录下的Excel文件时,webpack打包会对资源文件名做哈希处理,导致原路径失效;部分浏览器会直接打开Excel文件而非触发下载,也会造成“报错”的错觉。

解决方案

方案1:将文件放到public目录(最简单)

把template.xlsx移动到项目根目录的public文件夹下,修改<a>标签代码:

<template>
  <div class="row mt-5">
    <a href="/template.xlsx" download="template.xlsx">Download file</a>
  </div>
</template>

public目录下的文件会被直接复制到打包后的根目录,路径不会被修改;download属性可强制浏览器触发下载行为,而非打开文件。

方案2:通过import导入assets中的资源

若必须将文件放在assets目录,可通过import获取webpack处理后的正确路径:

<template>
  <div class="row mt-5">
    <a :href="excelUrl" download="template.xlsx">Download file</a>
  </div>
</template>

<script setup>
// 根据实际项目路径调整@的指向
import excelUrl from '@/assets/template.xlsx'
</script>

方案3:按钮触发Blob下载(适配后端接口返回文件流)

如果Excel文件是后端接口返回的文件流,可通过按钮点击动态创建下载链接:

<template>
  <div class="row mt-5">
    <button @click="downloadExcel">Download file</button>
  </div>
</template>

<script setup>
import axios from 'axios'

const downloadExcel = async () => {
  try {
    const res = await axios({
      url: '/api/your-download-api', // 替换为实际后端接口地址
      method: 'GET',
      responseType: 'blob' // 必须指定响应类型为blob
    })
    // 创建临时下载链接
    const blobUrl = window.URL.createObjectURL(new Blob([res.data]))
    const link = document.createElement('a')
    link.href = blobUrl
    link.download = 'template.xlsx'
    document.body.appendChild(link)
    link.click()
    // 清理临时资源
    window.URL.revokeObjectURL(blobUrl)
    document.body.removeChild(link)
  } catch (err) {
    console.error('下载失败:', err)
  }
}
</script>

内容的提问来源于stack exchange,提问作者user16365685

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:42:33