使用 SonataMediaBundle 上传到 AmazonS3

Posted

技术标签:

【中文标题】使用 SonataMediaBundle 上传到 AmazonS3【英文标题】:Upload to AmazonS3 with SonataMediaBundle 【发布时间】:2015-09-20 12:59:21 【问题描述】:

我想知道如何在 Symfony2 中包装 aws php sdk (aws/aws-sdk-php) 以便与 SonataMediaBundle 一起用作 cdn。

我目前的奏鸣曲配置:

sonata_media:
    default_context: default
    db_driver: doctrine_orm
    contexts:
        default:
            providers:
                - sonata.media.provider.image

            formats:
                default:  width: 100 , height: 100, quality: 70

        avatar:
            providers:
                - sonata.media.provider.image

            formats:
                medium:  width: 750 , quality: 90

    cdn:
        server:
            path: http://%s3_bucket_name%.s3-website-%s3_region%.amazonaws.com/%env%

    providers:
        image:
            filesystem: sonata.media.filesystem.s3
            service:    sonata.media.provider.image

    filesystem:
        local:
            directory:  %kernel.root_dir%/../web/uploads/media
            create:     false
        s3:
            bucket: %s3_bucket_name%
            accessKey: %s3_access_key%
            secretKey: %s3_secret_key%
            region: %s3_region%@
            directory: %env%

但我收到一个错误:Attempted to load class "AmazonS3" from the global namespace

【问题讨论】:

我的作曲家依赖:"aws/aws-sdk-php": "^3.0", "knplabs/knp-gaufrette-bundle": "*@dev" 【参考方案1】:

显然,使用配置文件是正确的做法,在这种情况下,我们以这种方式解决了我们的问题:

cdn:
  server:
    #path: http://%s3_bucket_name%.s3-website-%s3_region%.amazonaws.com/%env%
    path: http://%s3_region%/%s3_bucket_name%/selfies/%env% # this one is working

s3_region 具有以下值:s3_region: s3-eu-west-1.amazonaws.com

【讨论】:

【参考方案2】:

如果您使用sonata-project/media-bundle,请尝试使用https://packagist.org/packages/amazonwebservices/aws-sdk-for-php

正如你在 packagist 看到的那样 https://packagist.org/packages/sonata-project/media-bundle 或最新版本的composer.json https://github.com/sonata-project/SonataMediaBundle/blob/2.3.3/composer.json#L37 它需要/建议旧的amazonwebservices/aws-sdk-for-php: ~1.5 但不是新的aws/aws-sdk-php

只有dev-master 版本的https://packagist.org/packages/sonata-project/media-bundle 需要新的aws/aws-sdk-php

【讨论】:

如您所见,gaufrette 也支持旧版软件包:github.com/KnpLabs/Gaufrette/blob/master/composer.json#L30 谢谢伊戈尔。我用请求的亚马逊 SDK 更新了我的作曲家(“amazonwebservices/aws-sdk-for-php”:“1.5.*”)。我之前已经尝试过,但我遇到了另一个问题。 Curl 调用了一个错误的 url:bucket_name.region@,缺少一些东西,我不明白为什么。 ["message":"cURL 资源:资源 id #791;cURL 错误:无法连接到主机:443(cURL 错误代码 7)。

以上是关于使用 SonataMediaBundle 上传到 AmazonS3的主要内容,如果未能解决你的问题,请参考以下文章

SonataMediaBundle 的公共和私人媒体上传到不同的文件夹(网络和私人)

SonataMediaBundle : 允许用户上传链接

SonataMediaBundle:找不到文件/图像

SonataMediaBundle 与自定义实体一起使用

Symfony2 Sonata Media Bundle -- 上传图片时出错

未使用 SonataMediaBundle 找到 ManagerInterface