我正在尝试使用requests、lxml和base64io来使用Exchange。此服务在SOAP XML HTTP响应中返回base64编码的文件。文件内容包含在单个XML元素的一行中。GetAttachment
只是一个例子,但问题更普遍。
我想直接将解码的文件内容流式传输到磁盘,而不在任何时候将附件的全部内容存储在内存中,因为一个附件可能有几个100MB。
我尝试过这样的东西:
r = requests.post('https://example.com/EWS/Exchange.asmx', data=..., stream=True)
with open('foo.txt', 'wb') as f:
for action, elem in lxml.etree.iterparse(GzipFile(fileobj=r.raw)):
if elem.tag == 't:Content':
b64_encoder = Base64IO(BytesIO(elem.text))
f.write(b64_encoder.read())
但是lxml
仍然以elem.text
的形式存储附件的副本。有没有什么方法可以创建一个完全流式的XML解析器,它还可以直接从输入流中流式传输元素的内容?
https://stackoverflow.com/questions/52989143
复制相似问题