前端下载文件

下载文件最简单的方式,就是后端提供一个下载地址。前端只需要a链接绑定这个下载地址即可

<a href="下载地址" download>下载</a>

download也可以等于一个值,这个值就是文件名

但是如果后端传给我们的是一个文本或者字节流,则就需要我们用Blob对象再进行一下处理,把后端给的二进制或者文本数据利用Blob对象生成一个下载地址,然后创建a链接,自动触发a链接进行下载

下载json文件

javascript 复制代码
<template>
    <el-button @click="downFile">下载普通文件</el-button>
</template>

<script setup lang="ts">
import { reactive } from 'vue'

// 假装这是后端返回的文件内容
const obj = reactive({
    name: 'zs',
    age: 25,
    gender: 1
})

const downFile = () => {
    const blob = new Blob([JSON.stringify(obj)], { type: 'application/json' })
    // console.log(blob) // Blob {size: 33, type: 'application/json'}
    // 创建一个指向类型化数组的 URL 其实就是把上面的blob数据转换为了一个可以下载的url地址
    let href = window.URL.createObjectURL(blob)
    // 下载地址既然有了,那就可以生成一个a标签,直接自动点击下,就可以下载了
    const a = document.createElement('a')
    a.href = href // a链接的下载地址
    a.setAttribute('download', 'data.json') // 把a标签设置为下载,并为文件取名
    document.body.appendChild(a) // 把a链接插入到结构中
    a.click() // 自动点击触发下载
    // 下载完成后,记得移除a标签和释放生成的下载链接
    document.body.removeChild(a)
    window.URL.revokeObjectURL(href)
}
</script>

下载zip文件

javascript 复制代码
<template>
    <el-button @click="downZipFile">下载zip文件</el-button>
</template>

<script setup lang="ts">
import axios from 'axios'

const downZipFile = () => {
    // 请求zip文件数据   记得一定要给axios请求指定为blob
    axios.get('后端给的地址', { responseType: 'blob' }).then((res: any) => {
        // console.log(res)
        // Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取
        const blob = new Blob([res], { type: 'application/zip' })
        // console.log(blob)
        // 创建一个指向类型化数组的 URL 其实就是把上面的blob数据转换为了一个可以下载的url地址
        let href = window.URL.createObjectURL(blob)
        // 下载地址既然有了,那就可以生成一个a标签,直接自动点击下,就可以下载了
        const a = document.createElement('a')
        a.href = href // a链接的下载地址
        // a.setAttribute('download', 'data.zip') // 把a标签设置为下载,并为文件取名
        document.body.appendChild(a) // 把a链接插入到结构中
        a.click() // 自动点击触发下载
        // 下载完成后,记得移除a标签和释放生成的下载链接
        document.body.removeChild(a)
        window.URL.revokeObjectURL(href)
    })
}
</script>

下载其他文件(例如.doc,.xls,.ppt,.tar...)也是同理的,只需要改下Blob里对应的type

下面是office文件所对应的的 Content-type 类型 Content-type 类型总结

office文件所对应的的 Content-type类型Content-type类型总结 - 简书 (jianshu.com)

相关推荐
BigTopOne3 小时前
【WebRtc】DTLS-SRTP 加密完整流程详解
前端
陈随易4 小时前
pm2 替代品,nodejs&bun 线上部署必备工具
前端·后端·程序员
单线程_014 小时前
从案例分析 Vue3 Tokenizer 源码一
前端·javascript·vue.js
BigTopOne4 小时前
【WebRtc】-ICE Candidate 与 STUN/TURN 原理详解
前端
l1258654 小时前
# LangGraph Memory机制深度解析:短期记忆与长期记忆的工程实践
前端·人工智能·python·langchain·bootstrap
码视野4 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
大模型码小白4 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
xm_xm_xm_15 小时前
react17版本以前类组件常用操作
前端·javascript·react.js
ly76896 小时前
Web 性能优化实战:从 Core Web Vitals 到工程化性能治理
前端·性能优化
冬奇Lab7 小时前
一天一个开源项目(第200篇):next-forge - 生产级 Next.js SaaS 启动模板
前端·前端框架·开源