node - 实现文件下载

node部分

const fs = require('fs')
const http = require('http')
// 必用模块引用 ↑

const server = http.createServer((req, res) => {
	const { method, url } = req // 获取请求地址 以及请求方式
	if(method === 'post' && url === '/dow') {
		const size = fs.statSync('./res_file.txt').size; // 获取文件大小
		const headers = {
		  'Content-type': 'application/octet-stream', // 声明二进制文件流格式
		  'Content-Disposition': 'attachment;filename=res_file.txt', // 自定义文件名称
		  'Content-Length': size // 设置文件大小 【如果不设置这个,前端想实现进度条类似的功能,可能获取不到文件的总大小噢】
		}
		const filsPath = fs.createReadStream('./res_file.txt').pipe(res) // 获取文件
		filsPath.on('data', (data) => {
			res.write(data, 'binary')
		}).on('end', () => {
			res.end()
		})
	}
})
// 开启服务端口 ↓
server.listen('8080')

// 以上 - node 实现文件流传输就实现好了

js 部分

// axios
	axios({
	  method: 'post',
	  url: '/dow',
	  data: {},
	  headers: {},
	  responseType: 'blob', // <= 重点 不写,下载下来的文件会是一个损坏的文件
	  onDownloadProgress: (data) => {
			// 进度逻辑
		}
	});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值