擅长:python、mysql、java
<p>您还没有包含任何响应信息,包括内容类型;您需要复制一点有关原始响应的更多信息,以传达您返回的响应类型。否则使用默认值(由HTTP标准或Flask指定)。在</p>
<p>具体来说,至少要跨内容类型、长度和传输编码进行复制:</p>
<pre><code>headers={
'Content-Disposition': 'attachment; filename=' + stream['filename']
}
for header in ('content-type', 'content-length', 'transfer-encoding'):
if header in binary.headers:
headers[header] = binary.headers[header]
return flask.Response(binary.raw, headers=headers)
</code></pre>
<p>我使用的是<code>response.raw</code>底层的raw file对象;这应该也可以工作,但它的另一个优点是YouTube应用的任何压缩都可以保留。在</p>
<p>一些下载管理器可能会尝试使用<a href="http://en.wikipedia.org/wiki/Byte_serving" rel="nofollow">HTTP range request</a>来并行获取下载,即使服务器没有公布它支持此类请求。您可能应该使用一个<em>406 Not Acceptable</em>响应(不支持时请求字节范围是<code>Accept-*</code>冲突)。您需要记录下载管理器发送的邮件头,以确定是否存在这种情况。在</p>