流式上传请求?

2 投票
2 回答
1994 浏览
提问于 2025-04-17 19:56

我正在用Python实现一个简单的文件上传处理程序,它会将上传的文件分块读取到内存中,然后进行GZip压缩和签名,最后再将这些文件重新上传到另一个服务器进行长期存储。我已经想出了一个方法,可以通过我的网络服务器分块读取上传的文件,基本上我的工作流程是这样的:

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库来实现这个?看起来它们支持类似文件的上传对象,可以被读取,但我不太明白这具体是什么意思,以及如何在我的情况下应用它。我该如何提供这样的流式上传请求呢?

2 个回答

-1

下面这个回答可以解决你遇到的问题:

问:“如何将POST数据流入Python的请求中?”

答:这里有一个示例代码,使用了 queuethreadingiter() 结合哨兵模式。

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

0

我建议你使用Python的多进程模块。你可以在这个模块里使用apply_async这个功能,来上传每一部分文件,等它们上传完成后再进行下一步,这样就不会影响其他文件的上传。然后你可以把这些文件放在一个临时文件夹里,等所有上传完成后,再把它们合并在一起。

撰写回答