环境说明

前端

axios

原生JavaScript

后端

node.js:v16.19.1

express:4.18.2(接口快速开发框架)

cors:2.8.5(处理跨域的包)

原理

通过XHR或axios,发送文件下载请求,以axios为例,设置responseType为blob,表示是文件下载请求

点击按钮,发送文件下载请求,通过document.createElement("a"),动态创建一个a标签,但不要添加到页面上

设置a标签的href属性和download属性,href属性设置为文件下载的接口地址,download属性设置文件下载后的文件名

调用a标签对象的click方法,模拟a标签点击

前端

编写页面(index.html)

点击下载按钮,触发下载请求,选择保存的磁盘位置,即可发起下载

下载功能

后端

准备本地文件

data目录,1.txt 文件

我是测试文本

编写接口(index.js)

启动一个web服务端,监听4000端口。

再编写一个file接口,接口地址:http://127.0.0.1:4000/file

读取本地data目录下的1.txt,并返回文件流

// 1 引入包

const express = require("express")

const cors = require("cors")

const fs = require("fs")

const path = require("path")

// Web开发框架

const app = express()

// 跨域资源共享,解决跨域问题

app.use(cors())

// 2 定义接口 路由

app.get("/file", (req, res) => {

console.log('接收到文件下载请求...');

// 文件路径

const filePath = path.join(__dirname, "./data/1.txt")

// 同步读取文件

const file = fs.readFileSync(filePath)

// 返回二进制文件流

res.send(file)

console.log("响应文件结束...");

})

// 3 开启监听

const port = 4000

app.listen(port, () => {

console.log(`启动成功,监听${port}端口...`);

})