Search code examples
symfonyamazon-s3liipimaginebundlegaufrette

Error to generate AmazonS3 file url with Symfony2, LiipImagineBundle and Gaufrette on Twig


I'm using the LiipImagineBundle on Symfony2 and trying to integrate
with the gaufrette to catch images on amazonS3, but my "src" on images are wrong. I don't know if the error is my configs so...

This twig code:

{{ '123.jpg' | imagine_filter('128_128_75_s3') }}
// return http://localhost/project/web/media/cache/resolve/128_128_75_s3/123.jpg  
// expected is http://bucket.s3.amazonaws.com/media/cache/resolve/128_128_75_s3/123.jpg

My sevices.yml:

services:
    amazonS3:
        class: AmazonS3
        arguments:
            options:
                key: %aws_key%
                secret: %aws_secret%

    liip_imagine.cache.resolver.amazon_s3:
        class: Liip\ImagineBundle\Imagine\Cache\Resolver\AmazonS3Resolver
        arguments:
            - "@amazonS3"
            - "%aws_bucket%"
        tags:
            - { name: 'liip_imagine.cache.resolver', resolver: 'resolver.amazon' }

    liip_imagine.binary.loader.stream.import:
        class: Liip\ImagineBundle\Binary\Loader\StreamLoader
        arguments:
            - 'gaufrette://import/'
        tags:
            - { name: 'liip_imagine.binary.loader', loader: 'import' }

My config.yml:

# Gaufrette media bundle
knp_gaufrette:
    adapters:
        import:
            amazon_s3:
                amazon_s3_id: amazonS3
                bucket_name:  %aws_bucket%
                options:
                    create: true
    filesystems:
        import:
            adapter: import
            alias:   import
    stream_wrapper: ~

#Liip Imagine Bundle
liip_imagine:
    cache: resolver.amazon
    data_loader: stream.import
    filter_sets:
        128_128_75_s3:
            quality: 75
            filters:
                thumbnail: { size: [128, 128], mode: outbound }

Solution

  • AmazonS3Resolver is deprecated, try to use AwsS3Resolver:

    #service.yml
    awsS3:
        class: Aws\S3\S3Client
        factory_class: Aws\S3\S3Client
        factory_method:  factory
        arguments:
            -
                key:    %aws_key%
                secret: %aws_secret%
                region: %aws_region%
    
    liip_imagine.cache.resolver.amazon_s3:
        class: Liip\ImagineBundle\Imagine\Cache\Resolver\AwsS3Resolver
        arguments:
            - "@awsS3"
            - %aws_bucket%
        tags:
            - {name: 'liip_imagine.cache.resolver', resolver: 'resolver_as3'}
    
    #config.yml
    liip_imagine:
        cache: resolver_as3
        data_loader: import
        filter_sets:
            128_128_75_s3:
                quality: 75
                filters:
                    thumbnail: { size: [128, 128], mode: outbound }