Django Потоковый HTTP-ответ от RESTful API - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть приложение Django, которое должно взаимодействовать с базой данных медицинских изображений. У них есть RESTful API, который возвращает поток байтов, который я записываю в HttpStreamingResponse. Это работает, но проблема в том, что это очень медленно. Большинство файлов, которые я загружаю, имеют размер около 100 МБ, и обычно требуется около 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

1 Ответ

0 голосов
/ 05 сентября 2018

Вы загружаете полный ответ на свой сервер перед передачей информации.

Вы должны просто переслать ответ от вызова 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...