ASP.NET Core 3.0 大型文件分块浏览器下载

一、目的:

        最近在写C#这方面的东西,有个功能是从服务器下载大型文件到浏览器上。因为这套服务是部署在服务器上的,用户可以根据网址访问页面,用户在页面上点击按钮,下载ZIP文件。

        我之前的方案是对大文件直接获取,返回成文档流,前端再接收文档流,生成a链接下载。但是如果是大文件,这个进程就会很慢,不满足需求。

        在网上也查找了很多解决方案,从前端到后端。最终决定用对大文件分块进行传输,前端接收的方案。

        经测试:4GB大小的文件,原始方案用时3分30秒,新方案用时1分30秒(如果分的块大,速度可能更快)

二、实现思路:

1、后端: 

        ① 根据文件地址获取ZIP文件

        ② 获取该ZIP文件的字节大小

        ③ 循环处理,将文件划分成一个个小的模块

        ④ 创建请求头,将划分好的文件持续传递到前端

2、前端:

        ① 由于后端传输是一个长期的过程,那就需要前端将分成块的文件流全部获取

        ② 解析后端返回的 response 对象,其中 response.body 是一个 ReadableStream 对象,需要对该对象进行读取,并重新生成一个新的 ReadableStream 对象

        ③ 将新生成的 ReadableStream 对象,转化为 Blob 

        ④ 对Blob对象生成A链接下载

三、实现代码:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值