擅长:python、mysql、java
<p>在python中,您不能将任何需要的内容转换为上下文管理器。它需要非常具体的属性。使用当前代码,可以执行以下操作:</p>
<pre><code>response = requests.get(big_file_url, stream=True)
post_response = requests.post(upload_url, files={'file': ('filename', response.iter_content())})
</code></pre>
<p>使用<code>iter_content</code>将确保文件永远不在内存中。将使用迭代器,否则通过使用<code>content</code>属性,文件<strong>将</strong>加载到内存中。在</p>
<p><strong>编辑</strong>唯一合理的方法是使用<a href="http://www.python-requests.org/en/latest/user/advanced/#chunk-encoded-requests" rel="nofollow">chunk-encoded uploads</a>,例如</p>
^{pr2}$
<p>如果您绝对需要进行多部分/表单数据编码,那么您必须创建一个抽象层,它将在构造函数中使用生成器,以及来自<code>response</code>的<code>Content-Length</code>报头(为<code>len(file)</code>提供答案)将具有从生成器读取的read属性。问题再次是,我很确定在上传之前,整个东西都会被读入内存。在</p>
<p><strong>编辑2</strong></p>
<p>您可以自己制作一个生成器,自己生成<code>multipart/form-data</code>编码的数据。您可以通过与分块编码请求相同的方式传递它,但必须确保您设置了自己的<code>Content-Type</code>和{<cd3>}头。我没有时间画一个例子,但应该不会太难。在</p>