2

我在 Python 中实现了一个简单的上传处理程序,它将上传的文件分块读取到内存中,GZips 并对它们进行签名,然后将它们重新上传到另一台服务器以进行长期存储。我已经设计了一种方法来使用我的网络服务器分块读取上传,基本上我有一个这样的工作流程:

class MyUploadHandler:

    def on_file_started(self, file_name):
        pass

    def on_file_chunk(self, chunk):
        pass

    def on_file_finished(self, file_size):
        pass

这部分效果很好。

现在我需要在对它们进行修改后将文件分块上传到最终目的地。我正在寻找一个有点像这样的工作流程:

import requests

class MyUploadHandler:

    def on_file_started(self, file_name):
        self.request = requests.put("http://secondaryuploadlocation.com/upload/%s" %
                (file_name,), streaming_upload = True)

    def on_file_chunk(self, chunk):
        self.request.write_body(transform_chunk(chunk))

    def on_file_finished(self, file_size):
        self.request.finish()

有没有办法使用 Python requests 库来做到这一点?似乎它们允许可以读取类似文件的上传对象,但我不确定这到底意味着什么以及如何将其应用于我的情况。如何提供这样的流式上传请求?

4

2 回答 2

0

我建议使用 Python 的多处理模块。您可以使用该模块中的 apply_async 例程在每个块完成后上传它们,而不会影响其他上传。然后,您可以将它们放在一个临时文件夹中,上传事件完成后,您可以将它们缝合在一起。

于 2016-01-06T18:15:35.287 回答
-1

以下对类似问题的回答应该可以解决您的问题:

问:“如何将 POST 数据流式传输到 Python 请求中?”

queueA:使用,threadingiter()sentinel的示例代码

https://stackoverflow.com/a/40018547/19163

于 2016-10-14T06:49:34.030 回答