Ведро s3 не собирает созданные pdf в папке media django/aws
Я только что развернул свое приложение django на сервере beanstalk, связанном с ведром s3 в консоли aws.
В моем приложении pdf-файлы из каждого поста создаются и пересылаются в папку media в подпапке "postings". Однако в bucket такая папка не создается, и pdf-файлы также нигде не отображаются. Там только загруженные изображения постов. Как мне получить pdf-файлы? Кроме того, я получаю ValueError для изображения в PDF (которое является загруженным изображением и которое прекрасно работало до добавления в ведро). Как мне заставить его снова работать? Я думаю, что обе проблемы связаны с отсутствием какого-то соединения... Это мой первый проект, развертываемый на aws. Пожалуйста, помогите мне с небольшим объяснением.
Вот код созданного upload и pdf: views.py
def post_create(request):
if request.method == 'POST':
form = PostCreateForm(request.POST, request.FILES)
if form.is_valid():
form.cleaned_data['num_post'] = Post.objects.count() + 1
Post.objects.create(**form.cleaned_data)
else:
form = PostCreateForm()
return render(request, 'index.html', {'form': form})
def upload(request):
if request.method == 'POST':
image = request.FILES.get('image_upload')
caption = request.POST['caption']
num_post = Post.objects.count() + 1
new_post = Post.objects.create(image=image, caption=caption, num_post=num_post)
new_post.save()
# create pdf
buffer = io.BytesIO()
x_start = 100
y_start = 100
folder_path = f"media/postings/post{num_post}.pdf"
folder_name = os.path.join(BASE_DIR, folder_path)
p = canvas.Canvas(folder_name, pagesize=A4, )
if image is not None:
register_heif_opener()
pil_image = io.BytesIO()
PIL.Image.open(image.file).save(pil_image, 'PNG')
p.drawImage(ImageReader(PIL.Image.open(pil_image)), x_start, y_start, width=420, preserveAspectRatio=True,
mask='auto')
p.drawString(150, 650, new_post.caption)
p.drawString(100, 650, "caption:")
p.drawString(100, 170, str(new_post.created_at))
p.drawString(200, 700, str(num_post))
p.drawString(100, 700, "post no.:")
p.drawString(250, 700, "//")
p.drawString(100, 690, "===========================================================")
p.drawString(300, 700, str(new_post.id))
p.save()
buffer.seek(0)
return redirect('/')
else:
return redirect('/')
Модель поста
def post_images(instance, filename):
ext = filename.split('.')[-1]
filename = 'postimg{}.{}'.format(instance.num_post, ext)
return os.path.join('uploads', filename)
class Post(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
num_post = models.IntegerField(default=0)
image = models.ImageField(upload_to=post_images)
caption = models.TextField(max_length=300)
created_at = models.DateTimeField(auto_now_add=True)
number_of_likes = models.IntegerField(default=0)
number_of_dislikes = models.IntegerField(default=0)
likes_string = models.TextField(max_length=800, default="")
dislikes_string = models.TextField(max_length=800, default="")
interaction_count = models.IntegerField(default=0)
@property
def filename(self):
return os.path.basename(self.image.name).split('.')[0]
def __str__(self):
return self.caption
настройки носителя
хранилище
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage
class MediaFileStorage(S3Boto3Storage):
location = settings.MEDIAFILES_FOLDER
и конфигурация
option_settings:
aws:elasticbeanstalk:environment:proxy:staticfiles:
/static: staticfiles
/media: media
Итак, когда я создаю папку media таким образом, я получаю ошибку и pdf не создается. если я просто использую папку по умолчанию в ведре, я не получаю ошибку, но pdf все равно не создается... на сервере предварительного просмотра проекта все работало просто отлично. также без ведра. Но мне нужно ведро, чтобы я мог синхронизировать его с локальной папкой, чтобы получить размещенные файлы напрямую...