簡體   English   中英

RESTful API的Django Streaming HTTP響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM