Как хранить загруженные пользователем файлы на Digital Ocean Spaces с помощью django-storages?

Я совсем новичок в этом деле. Мое приложение Django запускается в Docker. Мое приложение позволяет пользователям загружать файлы, которые хранятся в памяти, затем выполняются некоторые функции над файлом, после чего генерируется новый файл, который пользователь может скачать. Я хотел бы хранить первоначальный загруженный пользователем файл и выходной файл, который генерирует мой код django. Вот мой код:

models.py:

class TranscribedDocument(models.Model):
    id = models.CharField(primary_key=True, max_length = 40)
    audio_file = models.FileField(upload_to='ai_transcribe_upload/', null= True)
    output_file = models.FileField(null= True)
    date = models.DateTimeField(auto_now_add=True, blank = True, null=True)

views.py:

#save uploaded file
if form.is_valid():
            uploaded_file = request.FILES['file']

            request.session['uploaded_file_name'] = uploaded_file.name
            request.session['uploaded_file_size'] = uploaded_file.size#add to models.py

            session_id = str(uuid.uuid4())
            request.session['session_id'] = session_id
            
            transcribed_doc, created = TranscribedDocument.objects.get_or_create(id=session_id)
            transcribed_doc.audio_file = uploaded_file
            transcribed_doc.save()

            
            request.session['uploaded_file_path'] = transcribed_doc.audio_file.path
            
#generate new file
with open(file_location, 'r', encoding=charenc) as f:
                        file_data = f.read()##
                        
                    transcribed_doc, created = TranscribedDocument.objects.get_or_create(
                            id = request.session['session_id']
                            )
                    transcribed_doc.output_file = transcript_path
                    transcribed_doc.date = timezone.now()
                
                    transcribed_doc.save() 

settings.py:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "postgres",
        "USER": "postgres",
        "PASSWORD": "postgres",
        "HOST": "db", # set in docker-compose.yml
        "PORT": 5432, # default postgres port
    }
}   

AWS_ACCESS_KEY_ID = 'key_id'
AWS_SECRET_ACCESS_KEY = 'secret_key_id'
AWS_STORAGE_BUCKET_NAME = 'name'
AWS_DEFAULT_ACL = 'public-read' #change to private
AWS_S3_ENDPOINT_URL = 'https://nyc3.digitaloceanspaces.com/' # Make sure nyc3 is correct
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400'
}


AWS_MEDIA_LOCATION = 'media/'
PUBLIC_MEDIA_LOCATION = 'media/'
MEDIA_URL = '%s%s' % (AWS_S3_ENDPOINT_URL, AWS_MEDIA_LOCATION)
DEFAULT_FILE_STORAGE = 'mysite.storage_backends.MediaStorage'

djangoProjects/mysite/storage_backends.py:

from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage

class MediaStorage(S3Boto3Storage):
    bucket_name = 'media'
    location = ''

requirements.txt:

whitenoise==6.1.0
django-storages[s3]==1.14.2
gunicorn==20.1.0

Существующий выше код, используемый для сохранения DO spaces, - это то, что я нашел в Интернете, однако он, похоже, предназначен для того, чтобы сделать файлы общедоступными, когда я хочу, чтобы они были приватными. Также он не работает, и вместо этого я вижу этот отчет об ошибке при запуске docker-compose logs:

Если есть более простая и безопасная альтернатива django-storages, пожалуйста, предложите.

Вернуться на верх