Да, вы можете использовать Django в качестве прокси для потоковой передачи ваших файлов S3 пользователю.
- Создайте стандартную ссылку S3 для вашего файла.
- Используйте библиотеку
requests
для извлечения файла в потоковом режиме.
- Используйте Django для подачи необработанного потока пользователю.
import requests, boto3
from django.views.generic import View
from django.http.response import HttpResponse
class MediaDownloadView(View):
def get(self, request, *args, **kwargs):
s3 = boto3.resource(
service_name='s3', aws_access_key_id='XXX_AWS_ACCESS_KEY_ID',
aws_secret_access_key='XXX_AWS_ACCESS_KEY',
)
url = s3.meta.client.generate_presigned_url(
ClientMethod="get_object", ExpiresIn=3600,
Params={
"Bucket": 'XXX_BUCKET_NAME',
"Key": 'XXX_OBJECT_KEY',
},
)
r = requests.get(url=url, stream=True)
r.raise_for_status()
response = HttpResponse(r.raw, content_type='audio/mp3')
response['Content-Disposition'] = 'inline; filename=music.mp3'
return response