擅长:python、mysql、java
<p>直接的错误是对MIME多部分元素编码错误。每个部分都有<strong>两个</strong>部分、标题和内容,中间有一个双换行符。你的第二个新行不见了,请加上:</p>
<pre><code>payload = """\
boundary123456
Content-Type: application/json; charset=UTF-8
Content-Disposition: attachment; name="metadata"
boundary123456
Content-Disposition: attachment; name="file"; filename="{0}"
{1}
boundary123456 \
""".format(os.path.basename(filepath), data)
</code></pre>
<p>我不会手动构建内容,而是重新使用<a href="https://pypi.python.org/pypi/requests-toolbelt" rel="nofollow noreferrer">^{<cd1>} project</a>以允许您以流式方式上载数据:</p>
^{pr2}$
<p>我调整了<a href="https://toolbelt.readthedocs.io/en/latest/uploading-data.html#requests_toolbelt.multipart.encoder.MultipartEncoder" rel="nofollow noreferrer">^{<cd2>} class</a>来发出<code>multipart/related</code>数据流,而不是<code>multipart/form-data</code>消息。在</p>
<p>请注意,我传递的是<em>open file对象</em>,而不是文件数据本身;这是因为<code>MultipartEncoder</code>允许您将数据流式传输到远程服务器,所以不必一次将文件读入内存。在</p>
<p>您可能希望在<code>metadata</code>部分中传递实际的JSON数据;用有效的JSON文档替换<code>(None, '', 'application/json; charset=UTF-8'</code>元组中的空字符串。在</p>