我也陷入了同样的困境,我可以成功地解决它。SonataMediaBundle 有一个 cli sync 命令,基本上它根据 cdn 配置重新生成媒体上下文的路由,所以如果你执行:
app/console sonata:media:sync
你会得到类似的东西:
Please select the provider
[0] sonata.media.provider.image
[1] sonata.media.provider.file
[2] sonata.media.provider.youtube
[3] sonata.media.provider.dailymotion
[4] sonata.media.provider.vimeo
这些上下文属于我的项目,你可能有类似的结构。我的情况是我只有图像,这意味着只是第一个:sonata.media.provider.image
。然后在设置您的选项后,例如:0
您将被要求选择上下文,例如:
Please select the context
[0] default
[1] news
[2] collection
[3] category
[4] profile
只需选择您当前使用的所有上下文(当然是一个一个,一步一步)。
对于每个步骤,您将获得如下信息:
Loaded 52 medias (batch #1, offset 0) for generating thumbs (provider: sonata.media.provider.image, context: default)
Generating thumbs for Scenario - 1
...
...
...
Done (total medias processed: 52).
所有流程完成后,如果您在管理仪表板中列出所有图像,您将看到所有图像都有属于 AWS S3 的新 URL。
第一步,确保您没有设置本地存储,因此您的设置应如下所示:
sonata_media:
filesystem:
s3:
bucket: %sonata_media_s3_bucket%
accessKey: %sonata_media_s3_accessKey%
secretKey: %sonata_media_s3_secretKey%
region: %sonata_media_s3_region%
create: true
代替:
sonata_media:
filesystem:
local:
directory: %kernel.root_dir%/../web/uploads/media
create: true
s3:
bucket: %sonata_media_s3_bucket%
accessKey: %sonata_media_s3_accessKey%
secretKey: %sonata_media_s3_secretKey%
region: %sonata_media_s3_region%
create: true
尽管您一直在本地存储图像,但您无需设置本地存储以将新内容与 AWS S3 同步。
同步过程只是重建存储媒体的路径。现在它不会将内容推送到 AWS S3,这就是为什么您必须手动将上传目录直接上传到您想要从现在开始存储媒体的存储桶的根目录。
媒体文档建议使用基于 S3 中静态存储的 cdn 路径,如果您不使用静态存储,我建议您使用默认 URL,例如:
...
cdn:
# define the public base url for the uploaded media
server:
path: "https://s3.amazonaws.com/%sonata_media.s3.bucket_name%/%sonata_media.cdn.host%"
...
假设您已经完成了 cli sync 命令的运行,并且您已经将媒体上传到了 AWS S3。
最后一步是重新保存每个包含图像或媒体的内容(例如:您博客中包含图像的所有帖子),这意味着您应该从管理仪表板中一一打开它们,然后必须单击更新和关闭按钮以更新媒体源(图像/视频/文件),因为这些不会自动更新。
我建议您在开发/暂存环境中执行所有这些步骤,然后再继续在生产中执行它。
成功执行上述步骤后,您可以删除旧的上传目录(旧的本地存储)。
完毕!