下载按钮点击一次却下载两个文件问题

今天碰到一个问题,创建一个下载模板按钮,平平无奇的功能代码如下

ini 复制代码
`
<!--template -->
...
       <DButton
            v-for="(templateUrl, index) in templateUrls"
            :key="index"
            link
            type="primary"
            :icon="Download"
            @click="templateUrl.url()"
          >
            {{ templateUrl.label }}
          </DButton>
  ...        
          
<!--js-->
    url: async () => {
  try {
    // const blob = await (serversApis.servers as any).knowledgeQaTemplate({ responseType: 'blob' })
    // // 兼容 axios 封装:可能直接返回 Blob 或 { data: Blob }
    // const data: Blob = (blob instanceof Blob) ? blob : (blob?.data ?? blob)
    // const url = URL.createObjectURL(data)
    // const a = document.createElement('a')
    // a.href = url
    // a.download = '问答导入模板.xlsx'
    // document.body.appendChild(a)
    // a.click()
    // a.remove()
    // URL.revokeObjectURL(url)
    //this is right code,no need to create a.click()
    await (serversApis.servers as any)
    .knowledgeQaTemplate({ responseType: 'blob' })
  }
  catch (e) {
    ElMessage.error('模板下载失败')
    // 控制台打印方便排查
    console.error('knowledgeQaTemplate 下载失败:', e)
  }

},`

看日志也是事件和请求只执行了一次,好一顿找,最后发现是响应头有这个:

Content-Disposition:attachment;filename*=%E7%9F%A5%E8%AF%86%E5%BA%93%E9%97%AE%E7%AD%94%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xlsx

所以直接改方法只执行请求方法即可:

url: async () => { try { // const blob = await (serversApis.servers as any).knowledgeQaTemplate({ responseType: 'blob' }) // // 兼容 axios 封装:可能直接返回 Blob 或 { data: Blob } // const data: Blob = (blob instanceof Blob) ? blob : (blob?.data ?? blob) // const url = URL.createObjectURL(data) // const a = document.createElement('a') // a.href = url // a.download = '问答导入模板.xlsx' // document.body.appendChild(a) // a.click() // a.remove() // URL.revokeObjectURL(url) //this is right code,no need to create a.click() await (serversApis.servers as any) .knowledgeQaTemplate({ responseType: 'blob' }) } catch (e) { ElMessage.error('模板下载失败') // 控制台打印方便排查 console.error('knowledgeQaTemplate 下载失败:', e) } },

完美!!!!

相关推荐
古茗前端团队29 分钟前
由 key 引发的思考
前端·javascript·react.js
kyriewen1 小时前
我扫了 422 个仓库,近一半 CI 在裸装依赖
前端·javascript·程序员
鹏多多1 小时前
AI 到底能不能独立做个产品?我拿一个小程序验证了
前端·微信小程序·ai编程
火山引擎开发者社区1 小时前
构建专属的飞书群开发助手,AgentKit Studio 一键部署 DeepSeek Harness Super-Agent
前端
啾咪orJIUMI3 小时前
Vue 3 + 高德地图封装实战:点位、区域、Loca 流光与 Vue 信息窗体
前端·vue.js
掘金者阿豪3 小时前
AI数据库不只是向量检索:从数据语义到库内智能计算的技术演进
前端
梦里寻码3 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
FRing033 小时前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
SameX4 小时前
HarmonyOS ArkUI Dialog 复用 用 @CustomDialog + enum type 做多类型统一管理的做法
前端
AiMan4 小时前
豆包爱学还是不可以导出左侧所有对话,只能单容导出,方法不对吗
前端