流式上传请求?
我正在用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的请求中?”
答:这里有一个示例代码,使用了 queue
、threading
和 iter()
结合哨兵模式。
0
我建议你使用Python的多进程模块。你可以在这个模块里使用apply_async这个功能,来上传每一部分文件,等它们上传完成后再进行下一步,这样就不会影响其他文件的上传。然后你可以把这些文件放在一个临时文件夹里,等所有上传完成后,再把它们合并在一起。