【发布时间】:2019-10-20 01:49:28
【问题描述】:
我想使用aiohttp 流式传输和下载文件。
Chrome可以支持下载链接的恢复能力
但下载管理器无法下载具有恢复功能的文件。
在下面的代码中,我使用 aiohttp 框架来流式传输和下载文件, 我还设置了标头参数 ('Accept-Ranges') 以支持恢复功能。
from telethon import TelegramClient, events
client = TelegramClient(name, api_id,api_hash)
@routes.get('/{userid}/{msgid}')
async def handle(request):
...
response = web.StreamResponse(
status=200,
reason='OK',
headers={
'Content-Type': content_type,
'Content-Length':str(file_size),
'Accept-Ranges': 'bytes',
'Connection': 'keep-alive',
}
)
await response.prepare(request)
async for chunk in client.iter_download(msg.media, chunk_size=512):
await response.write(chunk)
return response
app = web.Application()
app.add_routes(routes)
web.run_app(app,host='0.0.0.0')
当在浏览器中点击下载链接时,文件流式传输良好。
Chrome 很好地支持恢复功能,
我希望下载管理器能够很好地支持恢复功能,但是在暂停并再次开始下载后,下载管理器无法继续下载并要求用户重新开始下载。
消息IDM 给出:“尝试恢复下载时,互联网下载管理器从服务器得到响应,它不支持恢复下载......”
【问题讨论】:
-
似乎是
IDM的问题,aiohttp和telethon部分对我来说看起来是正确的。你甚至声称 Chrome 在这方面没有问题。 -
是的。我对 Chrome 没有任何问题。我需要为
http标头编写额外的代码还是在teleton中完成? -
另外,你应该使用
iter_download中的offset=参数来“从字节偏移量恢复”。但即便如此,它也无法解释 IDM 失败的原因。
标签: python-3.x stream aiohttp download-manager telethon