一次详解,从后端导出文件到前端(Blob)下载过程

本文详细介绍了如何从后端(以Koa2为例)导出文件,通过HTTP协议理解二进制文件流,利用Content-Type、Content-Length、Content-Disposition等头部信息,以及前端如何使用Blob优雅地处理文件下载。通过URL.createObjectURL和FileReader API实现文件下载。文章旨在帮助读者理解整个文件下载过程,提升技术思维体系。
摘要由CSDN通过智能技术生成

前言

对于不是从事音视频方面的同学来说,很多情况下都是通过window.location.href 来下载文件。这种方式,一般是前后端的登录态是基于Cookie+ Session 的方式,由于HTTP 请求首部字段会自动 Set-Cookie 来携带用户的 SessionId,所以可以用 window.location.href 来打开一个链接下载文件。

当然,还有一种情况,不需要登录态的校验(比较che)。

众所周知,还有另一种登录态的处理方式 JWT(JSON Web Token)。这种情况,一般会要求,前端在下载文件的时候在 请求首部 字段中添加 Token 首部字段。那么,这样一来,我们就不能直接通过 window.location.href 来下载文件。

不过,幸运的是我们有Blob ,它是浏览器端的 类文件对象 ,基于二进制数据,我们可以通过它来 优雅地 处理文件下载,不限于音视频、PDF、Excel 等等。所以,今天我们就从后端导出文件到 HTTP协议、非简单请求下的 预检请求 、以及最后的 Blob 处理文件,了解一番 何为其然、如何使其然?

后端(Koa2)导出文件(Excel)

首先,我们从后端导出文件讲起。这里,我选择Koa2 来实现Excel的导出,然后搭配 node-xlsx这个库,从而实现Excel 的二进制数据的导出。它看起来会是这样:

const xlsx = require("node-xlsx")

router.get("/excelExport", async function (ctx, next) {
    // 数据查询的结果
    const res = ["五柳", "22"]
    // 生成 excel 对应的 buffer 二进制文件
    const excelFile = xlsx.build([{name: "firstSheet", data: res}])
    // 设置文件名相关的响应首部字段
    ctx.set("Content-Disposition", "attachment;filename=test.xlsx;filename*=UTF-8")
    // 返回给前端
    ctx.body = buffer;
  });

这里就不对

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值