Как хранить загруженные пользователем файлы на 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, пожалуйста, предложите.