Liip_imagine генерирует неправильный URL-адрес кеша с помощью aws s3 (liip_imagine, vich_uploader, Flysystem)

В настоящее время у меня возникла проблема с настройкой liip_imagine. Моя установка:

  • Симфония 6.4
  • vichuploader 2.3
  • liipimagine 2.12
  • лига/флайсистема
  • aws/aws-sdk-php

Сначала я установил vichuploader с помощью Flysystem, и он работает, после этого я пытаюсь добавить liipimagine, но сгенерированный URL-адрес отсутствует на моем aws s3.

  • Домен сайта: mywebsite.com

  • Домен s3: assets.mywebsite.com.

  • URL-адрес, сгенерированный с помощью liipimagine: mywebsite.com/media/cache/resolve/md/facility/photo/big-img-65d760d9afe9a372425826.jpg

Эта часть работает хорошо, я могу загрузить изображение и отобразить его на своей ветке:

vic_uploader.yaml:

vich_uploader:
    db_driver: orm
    storage: flysystem 
    metadata:
            type: attribute
    mappings:   
        facility_photo:
            upload_destination: s3.facility_photo
            uri_prefix: '%asset_s3_url%/facility/photo'
            namer: Vich\UploaderBundle\Naming\SmartUniqueNamer
            inject_on_load: false
            delete_on_update: true
            delete_on_remove: true

Flysystem.yaml:

flysystem:
    storages:
        s3.facility_photo:
            adapter: 'aws'
            visibility: public
            options:
                client: 'Aws\S3\S3Client'
                bucket: '%amazon_s3_bucket%'
                prefix: 'facility/photo'
                streamReads: true

сервисы.yaml:

services:
    Aws\S3\S3Client:
        arguments:
            -
                version: "%amazon_s3_version%"
                region: "%amazon_s3_region%"
                endpoint: "https://s3.%amazon_s3_region%.amazonaws.com"
                credentials:
                    key: "%amazon_s3_key%"
                    secret: "%amazon_s3_secret%"

Но поэтому я добавил liipimagine:

liip_imagine:
    resolvers:
        cache_resolver_aws_s3:
            aws_s3:
                client_config:
                    credentials:
                        key:    "%amazon_s3_key%"
                        secret: "%amazon_s3_secret%"
                    region: "%amazon_s3_region%"
                    version: "%amazon_s3_version%"
                bucket: "%amazon_s3_bucket%"
                get_options:
                    Scheme: https
                put_options:
                    CacheControl: "max-age=86400"

    loaders:
        loader_aws_s3:
            flysystem:
                filesystem_service: 's3.facility_photo'

    filter_sets :
        cache: ~

        md:
            data_loader: loader_aws_s3
            cache: cache_resolver_aws_s3
            quality: 100
            filters:
                thumbnail: { size: [120, 90], mode: outbound }

Я попытался добавить фильтр «md» в свою ветку:

<img src = "{{ vich_uploader_asset(photo, 'imageFile', 'App\\Entity\\PhotoFacility') | imagine_filter('md') }}" />

Он не нашел URL-адрес s3, но нашел в домене моего сайта: mywebsite.com/media/cache/resolve/md/facility/photo/big-img-65d760d9afe9a372425826.jpg

Я забыл какую-то конфигурацию? Я следил за документами liipimage

Помощь будет приветствоваться, заранее благодарю за сотрудничество

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
152
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

У меня очень похожая настройка, за исключением того, что вместо этого я использую oneupFlysystemBundle, но я думаю, что это может помочь:

Я думаю, вам нужно изменить преобразователь на что-то вроде

resolvers:
    flysystem_resolver:
        flysystem:
            filesystem_service: s3.facility_photo
            root_url:           '%uploads_base_url%'
            cache_prefix:       media/cache
cache: flysystem_resolver

и удалите ключ cache из наборов фильтров.

Также у меня есть

uploads_base_url: '%env(AWS_BUCKET_BASE_URL)%'

определено в services.yaml

Спасибо за ответ, я пробовал, но проблема осталась та же. Даже если я изменю значение cache_prefix: , сгенерированный URL-адрес по-прежнему будет mywebsite.com/media/cache. Возможно ли, что конфигурация моего liip не загружена?

Julien 0 23.02.2024 17:02

Я пытаюсь без использования FlySystem, но AWS S3 Resolver, но столкнулся с той же проблемой.

Julien 0 26.02.2024 10:56
Ответ принят как подходящий

Я обнаружил свою ошибку: это была проблема не с конфигурацией liipimagine, а с системой Fly.

В пакете League/flysystem League/flysystem-aws-s3-v3/AwsS3V3Adapter.php я проверил функцию fetchFileMetadata(), значение «Key», сгенерированное в:

$arguments = ['Bucket' => $this->bucket, 'Key' => $this->prefixer->prefixPath($path)];

facility/photo/facility/photo/big-img-65d760d9afe9a372425826.jpg (дубликат префикса «объект/фото»)

Таким образом, $result = $this->client->execute($command); генерирует ошибку, поскольку на запрос выдается ошибка.

Чтобы это исправить, мне просто пришлось удалить префикс из flysystem.yaml:

s3.facility_photo:
            adapter: 'aws'
            visibility: public
            options:
                client: 'Aws\S3\S3Client'
                bucket: '%amazon_s3_bucket%'
                # prefix: 'facility/photo'
                streamReads: true

Потому что «объект/фото» уже было создано vich_uploader.yaml:

facility_photo:
            upload_destination: s3.facility_photo
            uri_prefix: '%asset_s3_url%/facility/photo'
            namer: Vich\UploaderBundle\Naming\SmartUniqueNamer
            inject_on_load: false
            delete_on_update: true
            delete_on_remove: true

После этого liipimagine получил функциональный ответ и сгенерировал нужную ссылку, используя мой файл s3.

Не стесняйтесь редактировать мой пост, чтобы исправить мои ошибки в английском языке! :)

Другие вопросы по теме