一个TCP链接可以对应多个HTTP请求,只要这个TCP链接没有断开,就可以发送HTTP请求。
用seek
获取文件一部分然后用FileResponse
返回文件的方法不太可以(返回的数据看起来有点奇怪),尝试用streamingHttpResponse
是可以的,参考如下。
Django 中使用流响应处理视频 streamingHttpResponse
Django使用流响应streamingHttpResponse处理视频
整理的参考链接:
把大象装进冰箱:HTTP 传输大文件的方法(HTTP协议的具体规范)
大文件分片上传
[服务器端]:
[客户端]:分片上传插件,例如:webuploader。大文件分片上传,断点续传,秒传 实现
一个比较完整的,断点续传,hash等等都有考虑
大文件分片下载
[服务器端]:使用http的range头。参考链接见上。
[客户端]:先获取文件大小,再循环请求,将所有下载好的文件合并为一整个zip。手摸手,带你完成大文件分片下载(该链接实操时会发现一个问题,下载的文件切片全都存储在内存中,内存爆炸,大于3、4G的文件就不太行)
前端下载文件的一些拟解决方案:
前端JS 下载大文件解决方案(主要2G以下)
上文提到一个链接:Saving huge files ( 2GB + )
有两个插件,fileSaver和strameSaverStreamSaver.js可以参考一下
Saving huge files链接里面提到一个Filesystem API
,搜索之后现在应该舍弃这种叫法变为File System Access API
,一些相关链接:ile System Access API文档汇总(JavaScript操作本地文件)
中心思想对了但不确定有没有用:aiohttp 异步http请求-5.下载大文件边下载边保存(节省内存)
没看懂写的什么意思,但很专业的样子:前端自个突破浏览器Blob和RAM大小限制保存文件的骚玩法!