我有一个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