Я пытаюсь вернуть ответ на потоковое видео из приватного ведра. Для этого мой django сервер получит видео от S3 и вернет ответ.
def get_video_from_fragment(self, request, custom_id=None):
s3 = AmazonApi()
streaming_body = s3.get_file_to_stream(fragment.video.file)
if streaming_body is None:
return Response({'details': "error retreiving the video"}, status=500)
response = StreamingHttpResponse(streaming_content=streaming_body)
response['Content-Disposition'] = f'attachment; filename="{fragment.video.filename}"'
return response
Он хорошо работает для Chrome и Firefox, но не для Safari.
Я читал для Safari, что контент должен доставляться с кодом состояния 206. Дело в том, что мой Nginx уже хорошо передает файлы статики (в данном случае mp4), но не такой ответ.
Я пытался добавить
response = StreamingHttpResponse(streaming_content=streaming_body, status=206)
, но на самом деле, это ничего не меняет. Я тестирую curl, как в документации (от Apple)
Я полагаю, что мой nginx (или django) знает как управлять моими файлами .mp4, но не знаю, как это сделать с вызовом, который возвращает StreamingHttpResponse.
Также я проверяю, как другие веб-сайты доставляют свой контент, и вижу на своей вкладке сети консоли Safari разницу в положение дел. Например, на веб-сайте Google есть код состояния в заголовках ответа
, но мой только в сводной части.
Итак, как я могу управлять доставкой контента с S3, используя django как прокси?