我们之前将所有奏鸣曲媒体文件存储在本地目录中,但现在我们迁移到了 AWS S3。转移到S3后,现在Sonatamedia无法访问旧的本地文件。Sonatamedia也在尝试在S3上查找旧文件。新文件正在 S3 上上传并可访问。
现在请告知如何将我们的旧数据同步到 S3 或 SonataMedia 捆绑包可以在本地而不是 S3 上查找旧文件。
我们目前的SonataMedia配置如下所述
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
.....
我处于同样的困境,我可以成功地解决它。SonataMediaBundle 有一个 cli 同步命令,基本上它会根据 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。
最后一步是重新保存包含图像或媒体的每个内容(例如:博客中所有包含图像的帖子(,这意味着您应该从管理仪表板中逐个打开它们,然后必须单击更新和关闭按钮以更新媒体源(图像/视频/文件(,因为这些不是自动更新的。
我建议您先在开发/暂存环境中执行所有这些步骤,然后再在生产中执行。
成功执行上述步骤后,您可以删除旧的上传目录(旧的本地存储(。
做!