如何使用Python请求同时下载和上载文件

时间:2017-05-10 16:34:14

标签: python http python-requests

我正在尝试从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在内的任何内容。

0 个答案:

没有答案