[英]Django Streaming HTTP Response from RESTful API
我有一个Django应用程序,需要与医学图像数据库进行交互。 他们有一个RESTful API,它返回字节流,我正在将它们写入HttpStreamingResponse
。 这是可行的,但问题是它非常慢。 我正在下载的大多数文件都在100mb左右,通常甚至需要15到20秒才能开始下载。 有谁知道如何加快此过程并更快地开始下载?
这是我的代码:
# Make api call
response = requests.get(url, cookies=dict(JSESSIONID=self.session_id))
# write bytes to Http Response
http = StreamingHttpResponse(io.BytesIO(response.content), content_type='application/zip')
http['Content-Disposition'] = 'attachment; filename="%s.zip"' % patient_id
return http
您正在传递完整的响应到您的服务器,然后再传递信息。
您应该使用以下命令转发来自API调用的响应:
res = FROM API CALL
response = HttpResponse(ContentFile(res.content), 'application/zip')
response['Content-Disposition'] = 'attachment; filename={}.zip'.format(patient_id)
response['Content-Length'] = res.headers.get('Content-Length')
response['Content-Transfer-Encoding'] = res.headers.get('Content-Transfer-Encoding')
response['Content-Type'] = res.headers.get('Content-Type')
return response
确保复制所有重要的标题。
编辑:由于这是唯一提出的解决方案,因此我正在编辑,以一种更具可读性的格式包括John的评论中的解决方案:
# Make api call
response = requests.get(url, cookies=dict(JSESSIONID=self.session_id), stream=True)
# write bytes to Http Response
http = StreamingHttpResponse(response.iter_content(8096), content_type='application/zip')
http['Content-Disposition'] = 'attachment; filename="%s.zip"' % patient_id
return http
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.