我正在尝试从nginx服务器流式下载并同时上传它。下载正在使用请求流实现;上传正在使用分块 - 目的是能够在发生向下/上传时报告进度。
到目前为止,我所得到的整体代码是这样的:
with closing(requests.get(vmdk_url, stream=True, timeout=60 + 1)) as vmdk_request:
chunk_in_bytes = 50 * 1024 * 1024
total_length = int(vmdk_request.headers['Content-Length'])
def vmdk_streamer():
sent_length = 0
for data in vmdk_request.iter_content(chunk_in_bytes):
sent_length += len(data)
progress_in_percent = (sent_length / (total_length * 1.0)) * 100
lease.HttpNfcLeaseProgress(int(progress_in_percent))
yield data
result = requests.post(
upload_url, data=vmdk_streamer(), verify=False,
headers={'Content-Type': 'application/x-vnd.vmware-streamVmdk'})
在某些情境中,工作正常。我把它放到另一个(Cloudify插件,如果你感兴趣的话),当它达到60s左右时就无法读取数据。
所以我正在寻找另一种 - 或者更简单 - 流式传输下载/上传的方式,因为我的60s问题可能围绕着我的流式传输(我希望)。最好是requests
,但实际上我会使用包括原始urllib3
在内的任何内容。