Сделать файлы общедоступными при загрузке в ведро AWS S3 из Django
В настоящее время я работаю с базовым приложением для потоковой передачи музыки и хотел бы, чтобы все файлы, загруженные в мое ведро S3, имели публичный доступ для чтения. Сейчас, когда они загружаются с помощью "upload_to" в поле FileField, они не являются общедоступными. Как я могу изменить свой код, чтобы сделать это автоматическим процессом?
concert.models
from django.db import models
from django.db.models import (
CharField,
TextField,
ForeignKey,
BooleanField,
DateField,
FileField,
IntegerField,
CASCADE
)
import uuid
import pdb
from django.contrib.auth.models import User
from django.utils import timezone
from django.utils.timezone import now
def user_directory_path(instance, filename):
random_file_name = "".join([str(uuid.uuid4().hex[:6]), filename])
return "concerts/{0}/{1}/{2}/{3}/{4}/{5}".format(instance.concert.date.year, instance.concert.date.month, instance.concert.date.day, instance.concert.venue, instance.concert.pk, random_file_name)
class Band(models.Model):
name = TextField()
def __str__(self):
return self.name
class Concert(models.Model):
venue = TextField()
date = DateField()
city = CharField(null=True, blank=True, max_length=100)
state = CharField(null=True, blank=True, max_length=100)
country = TextField()
band = ForeignKey(Band, on_delete=CASCADE, related_name='concert')
user = ForeignKey(User, on_delete=CASCADE, related_name='concert')
date_created = DateField(default=now)
def save(self, *args, **kwargs):
'''On save, update timestamps '''
if not self.id:
self.date_created = timezone.now()
return super(Concert, self).save(*args, **kwargs)
def __str__(self):
return self.venue
class Song(models.Model):
title = TextField()
concert = ForeignKey(Concert, on_delete=CASCADE, related_name='song')
user = ForeignKey(User, on_delete=CASCADE, related_name='song', null=True, blank=True)
concert_order = IntegerField(null=True, blank=True)
audio_file = models.FileField("Song", upload_to=user_directory_path, null=True)
date_created = DateField(default=now)
def save(self, *args, **kwargs):
'''On save, update timestamps '''
if not self.id:
self.date_created = timezone.now()
return super(Song, self).save(*args, **kwargs)
def __str__(self):
return self.title