【发布时间】:2015-06-28 19:02:48
【问题描述】:
我的目标是使用请求对文件的一部分进行 PUT 并流式传输文件(即,不将其加载到内存中然后执行 PUT)。
This page 解释了如何对整个文件执行此操作:
Requests 支持流式上传,允许您发送大量 流或文件而不将它们读入内存。流式传输和 上传,只需为您的 body 提供一个类似文件的对象:
with open('massive-body', 'rb') as f:
requests.post('http://some.url/streamed', data=f)
但是,就我而言,我只想发送文件的一部分。有没有办法做到这一点?
在概念上,类似于:
with open('massive-body', 'rb') as f:
requests.post('http://some.url/streamed', data=f.read(chunksize))
【问题讨论】:
-
嗯,您可能会编写一个生成器,假装是一个类似文件的对象,它将在幕后读取一个块,但可能会很棘手,因为我不确定请求对文件执行什么调用,但如果没有更好的解决方案似乎是可能的
-
@user3012759:我尝试在类似文件的对象中搜索 Request 所需的内容,但无济于事。但是,请注意,它接受 Chunk-Encoded Requests 的简单生成器
-
我想您可以尝试使用具有
read和close方法的基本类文件类,如果这不起作用,请继续向您的类添加方法,直到请求停止抱怨。 :) -
我不清楚“我的目标是使用请求对文件的一部分进行 PUT 并流式传输文件”是什么意思。您是否也不想将该 chunk 读入内存?如果这就是你想要的,我可以帮你想出一个解决方案。为了您的信息,如果将块读入内存是可以的,那么您的第二个 sn-p 就可以正常工作。
-
@sigmavirus24,没错,我不想将所有的 'f.read(chunksize)' 加载到内存中。