我有一个Django应用程序,需要与医学图像数据库进行交互。它们具有RESTful API,该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
答案 0 :(得分:0)
您正在将完整的响应下载到服务器,然后再传递信息。
您应该使用以下命令转发来自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
确保您复制了所有重要的标题。
编辑:由于这是唯一提出的解决方案,因此我正在编辑,以一种更具可读性的格式包括约翰的评论中的解决方案:
# 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