使用 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 的公共和私人媒体上传到不同的文件夹(网络和私人)