Python 未在已服务blob的Flask App引擎响应上设置内容长度标头

Python 未在已服务blob的Flask App引擎响应上设置内容长度标头,python,google-app-engine,python-requests,google-cloud-storage,blobstore,Python,Google App Engine,Python Requests,Google Cloud Storage,Blobstore,在我基于Flask的googleappengine服务器中,我试图返回一个带有“contentlength”标题的响应,该标题将包含提供给客户端的blob的最终大小。此blob是一个大型媒体文件,因此此标头将用于设置UI前端上进度条的最大值。blob位于云存储中,但正在使用应用程序引擎包中的blobstore API检索blob。下面返回一个200状态代码: response.headers['Content-length'] = blobstore.BlobInfo(version.blob_

在我基于Flask的googleappengine服务器中,我试图返回一个带有“contentlength”标题的响应,该标题将包含提供给客户端的blob的最终大小。此blob是一个大型媒体文件,因此此标头将用于设置UI前端上进度条的最大值。blob位于云存储中,但正在使用应用程序引擎包中的blobstore API检索blob。下面返回一个
200
状态代码:

response.headers['Content-length'] = blobstore.BlobInfo(version.blob_key).size
return response
正在使用接收,并且正在对接收的数据进行流传输()。我的代码如下所示:

with requests.get(url='/api/download', stream=True) as r:
    print(r.headers)
但是,没有设置
内容长度
标题。相反,我从上面的
print()

{'Cache-Control': 'no-cache', 
 'Content-Type': 'text/plain; charset=utf-8', 
 'X-Cloud-Trace-Context': '1bca54f9cdae7394de6cb2f1e824ba6f', 
 'Transfer-Encoding': 'chunked',
 'Date': 'Thu, 26 Apr 2018 11:36:17 GMT',
 'Server': 'Google Frontend'}

我注意到,从那个应用程序引擎中,我去掉了内容长度标题,并用正确的大小替换它,但我并没有从一开始就得到内容长度标题。我做错了什么?我是不是给客户送错了?内容长度是否不可用且无法设置?如果是这样,我如何检索文件的大小,以便计算UI进度条的大小?

标题中包含
内容长度

正如您和文档所指出的,App Engine根据请求数据计算内容长度头,并在发送之前将其添加到请求中

您可以随时设置个性化标题,Flask允许,GAE将允许您使用它

例如,对于您的答复:

response.headers['CL-blob'] = blobstore.BlobInfo(version.blob_key).size