我有一个在Python和Flask开发的Web应用程序,登录后,点击特定文件的下载链接,它开始流式下载文件,并且工作正常。
现在,如果下载失败(文件被部分下载),并且用户点击文件的Firefox下载中的恢复按钮。然后它发送Range: bytes=7904925-,我使用这个头允许从它离开的地方下载恢复文件,即跳过7904925字节。但它不工作,下载失败。
这里是代码,它也有范围头部分,
start_bytes=0
if 'Content-Range' in request.headers:
range_str = request.headers['Content-Range']
start_bytes = int(range_str.split(' ')[1].split('-')[0])
start_bytes=int(start_bytes)
elif "Range" in request.headers:
range_str = request.headers['Range']
start_bytes = int(range_str.split('=')[1].split('-')[0])
start_bytes=int(start_bytes)
# Streaming download
def generate(start_bytes):
with open(file_path, 'rb') as f:
while True:
if start_bytes>0:
print "Start Bytes:", start_bytes
f.seek(start_bytes)
print f.tell()
data = f.read(1024)
print "Streaming..."
if not data:
break
yield data
return Response(stream_with_context(generate(start_bytes)), mimetype="application/octet-stream",
headers={
'Content-Disposition': 'attachment; filename="%s"' % file_name,
'content-length': '%s' % os.path.getsize(file_path)
},
content_type="application/octet-stream")什么不见了?如果是简历,我需要以不同的方式回复吗?
更新我将打印语句输出为
Start Bytes: 7904925
7904925
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
Streaming...
...
...而且更少的次数和下载失败,在控制台上没有错误。