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

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