媒体经理
默认情况下,媒体管理器使用安装目录的 storage/app/media 子目录。为了使用 Amazon S3 或 Rackspace CDN,您应该更新系统配置。
你需要安装驱动插件 在您可以使用 Amazon S3 或 Rackspace CDN 功能之前。
请注意,在您更改媒体管理器配置后,您应该重置其缓存。您可以通过按Refresh 媒体管理器工具栏中的按钮。
配置 Amazon S3 访问
要将 Amazon S3 与 Winter CMS 一起使用,您应该创建 S3 存储桶、存储桶中的文件夹和 API 用户。
注册亚马逊 AWS 账户或使用您现有的账户登录 AWS 控制台。打开 S3 管理面板。创建一个新的存储桶并为其分配任何名称(存储桶的名称将成为您的公共文件 URL 的一部分)。
创造media 桶中的文件夹。文件夹名称无关紧要。此文件夹将成为您的媒体库的根目录。
默认情况下无法直接访问 S3 存储桶中的文件。要公开存储桶,请返回存储桶列表并单击该存储桶。点击Properties 右侧边栏中的按钮。扩张Permissions 标签。点击编辑存储桶策略 关联。将以下代码粘贴到策略弹出窗口。将存储桶名称替换为您的实际存储桶名称:
{
"Version": "2008-10-17",
"Id": "Policy1397632521960",
"Statement": [
{
"Sid": "Stmt1397633323327",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKETNAME/*"
}
]
}
点击Save 按钮应用策略。该策略授予对存储桶中所有文件夹和目录的公共只读访问权限。如果您打算将存储桶用于其他需要,可以设置对存储桶中特定文件夹的公共访问权限,只需在Resource 价值:
"arn:aws:s3:::BUCKETNAME/media/*"
您还应该创建一个 API 用户,Winter CMS 将使用该用户来管理存储桶文件。在 AWS 控制台中转到 IAM 部分。转到用户选项卡并创建一个新用户。用户名无关紧要。确保在创建新用户时选中“为每个用户生成访问密钥”复选框。 AWS 创建用户后,它允许您查看安全凭证 - 用户访问密钥 ID 和秘密访问密钥.复制密钥并将它们放入临时文本文件中。
返回到用户列表并单击您刚刚创建的用户。在里面Permissions 部分点击附上保单 按钮。选择AmazonS3FullAccess 列表中的策略并单击附上保单 按钮。
现在您拥有更新 Winter CMS 配置的所有信息。打开config/filesystem.php 脚本并找到disks 部分。已经包含s3配置,需要替换API凭证和bucket信息参数:
Parameter | Value |
---|---|
key |
这访问密钥 ID 您之前创建的用户的价值。 |
secret |
这秘密访问密钥 您之前创建的用户的价值。 |
bucket |
你的桶名。 |
region |
桶区域代码,见下文。 |
您可以在 S3 管理控制台的存储桶属性中找到存储桶区域。 “属性”选项卡显示区域名称,例如俄勒冈。 S3 驱动程序配置需要存储桶代码。使用此表查找存储桶的代码(您也可以查看AWS 文档):
Region | Code |
---|---|
美国东部(俄亥俄州) | us-east-2 |
美国东部(弗吉尼亚北部) | us-east-1 |
美国西部(加利福尼亚北部) | us-west-1 |
美国西部(俄勒冈) | us-west-2 |
亚太地区(香港) | ap-east-1 |
亚太地区(孟买) | ap-south-1 |
亚太地区(大阪当地) | ap-northeast-3 |
亚太地区(首尔) | ap-northeast-2 |
亚太地区(新加坡) | ap-southeast-1 |
亚太地区(悉尼) | ap-southeast-2 |
亚太地区(东京) | ap-northeast-1 |
加拿大(中部) | ca-central-1 |
中国(北京) | cn-north-1 |
中国(宁夏) | cn-northwest-1 |
欧盟(法兰克福) | eu-central-1 |
欧盟(爱尔兰) | eu-west-1 |
欧盟(伦敦) | eu-west-2 |
欧盟(巴黎) | eu-west-3 |
欧盟(斯德哥尔摩) | eu-north-1 |
南美洲(圣保罗) | sa-east-1 |
中东(巴林) | me-south-1 |
更新后的示例配置:
'disks' => [
...
's3' => [
'driver' => 's3',
'key' => 'XXXXXXXXXXXXXXXXXXXX',
'secret' => 'xxxXxXX+XxxxxXXxXxxxxxxXxxXXXXXXXxxxX9Xx',
'region' => 'us-west-2',
'bucket' => 'my-bucket'
],
...
]
节省config/filesystem.php 脚本并打开config/cms.php 脚本。查找部分storage.在里面media 参数更新disk,folder 和path 参数:
Parameter | Value |
---|---|
disk |
使用s3 价值。 |
folder |
您在 S3 存储桶中创建的文件夹的名称。 |
path |
存储桶中文件夹的公共路径,见下文。 |
要获取文件夹的路径,请打开 AWS 控制台并转到 S3 部分。导航到存储桶并单击您之前创建的文件夹。将任何文件上传到该文件夹并单击该文件。点击Properties右侧边栏中的按钮。文件网址在Link 范围。复制 URL 并从中删除文件名和尾部斜杠。
示例存储配置:
'storage' => [
...
'media' => [
'disk' => 's3',
'folder' => 'media',
'path' => 'https://s3-us-west-2.amazonaws.com/your-bucket-name/media'
]
]
恭喜!现在您已准备好将 Amazon S3 与 Winter CMS 结合使用。请注意,您还可以配置 Amazon CloudFront CDN 以使用您的存储桶。本文档未涉及此主题,请参阅CloudFront 文档.配置 CloudFront 后,您需要更新path 存储配置中的参数。
配置 Rackspace CDN 访问
要将 Rackspace CDN 与 Winter CMS 一起使用,您应该创建 Rackspace CDN 容器、容器中的文件夹和 API 用户。
登录到 Rackspace 管理控制台并导航到存储/文件页面。创建一个新容器。容器名称无关紧要,它将成为您的公共文件 URL 的一部分。选择公共(启用 CDN) 为新容器键入。
创造media 容器中的文件夹。文件夹名称无关紧要。此文件夹将成为您的媒体库的根目录。
您应该创建一个 API 用户,Winter CMS 将使用它来管理 CDN 容器中的文件。在 Rackspace 控制台中打开帐户/用户管理页面。点击创建用户 按钮。填写用户名(例如winter.cdn.api)、密码、安全问题和答案。在里面产品访问 部分选择Custom 并在 CDN 行中选择Admin.使用禁止访问 在中的作用Account 部分和使用技术联系人 输入联系信息 部分。保存用户帐户。保存帐户后,您将看到“登录详细信息”部分,其中包含API密钥 包含您需要在 Winter CMS 配置文件中使用的值的行。
现在您拥有更新 Winter CMS 配置的所有信息。打开config/filesystems.php 脚本并找到disks 部分。它已经包含 Rackspace 配置,您需要替换 API 凭据和容器信息参数:
Parameter | Value |
---|---|
username |
Rackspace 用户名(例如 winter.cdn.api)。 |
key |
用户的API密钥 您可以从 Rackspace 用户配置文件页面复制。 |
container |
容器名称。 |
region |
桶区域代码,见下文。 |
endpoint |
保留原值。 |
region |
您可以在 Rackspace 控制面板的 CDN 容器列表中找到该区域。该代码是一个 3 个字母的值,例如它是ORD 对于芝加哥。 |
更新后的示例配置:
'disks' => [
...
'rackspace' => [
'driver' => 'rackspace',
'username' => 'winter.api.cdn',
'key' => 'xx00000000xxxxxx0x0x0x000xx0x0x0',
'container' => 'my-bucket',
'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
'region' => 'ORD'
],
...
]
节省config/filesystem.php 脚本并打开config/cms.php 脚本。查找部分storage.在里面media 参数更新disk,folder 和path 参数:
Parameter | Value |
---|---|
disk |
使用rackspace 价值。 |
folder |
您在 CDN 容器中创建的文件夹的名称。 |
path |
容器中文件夹的公共路径,见下文。 |
要获取文件夹的路径,请转到 Rackspace 控制台中的 CDN 容器列表。单击容器并打开媒体文件夹。上传任何文件。文件上传后,单击它。该文件将在新的浏览器选项卡中打开。复制文件 URL 并从中删除文件名和尾部斜杠。
示例存储配置:
'storage' => [
...
'media' => [
'disk' => 'rackspace',
'folder' => 'media',
'path' => 'https://xxxxxxxxx-xxxxxxxxx.r00.cf0.rackcdn.com/media'
]
]
恭喜!现在您已准备好将 Rackspace CDN 与 Winter CMS 一起使用。
音频和视频播放器
系统默认使用HTML5音视频标签渲染音视频文件:
<video src="video.mp4" controls></video>
or
<audio src="audio.mp3" controls></audio>
此行为可以被覆盖。如果有wn-audio-player.htm 和wn-video-player.htm CMS partials,它们将用于显示音频和视频内容。在部分内部使用变量src 输出源文件的链接。例子:
<video src="{{ src }}" width="320" height="200" controls preload></video>
如果您不想使用 HTML5 播放器,您可以在部分中提供任何其他标记。有一个第三方脚本 在旧版浏览器中支持 HTML5 视频和音频标签。
由于部分是用 Twig 编写的,您可以根据命名约定自动添加替代视频源。例如,如果约定每个全分辨率视频总是有一个较小分辨率的视频,并且较小分辨率文件的扩展名为“iphone.mp4”,则生成的标记可能如下所示:
<video controls>
<source
src="{{ src }}"
media="only screen and (min-device-width: 568px)"></source>
<source
src="{{ src|replace({'.mp4': '.iphone.mp4'}) }}"
media="only screen and (max-device-width: 568px)"></source>
</video>
其他配置选项
有几个选项可以让您微调媒体管理器。所有这些都可以定义在config/cms.php 脚本,在storage/media 部分,例如:
'storage' => [
...
'media' => [
...
'ignore' => ['.svn', '.git', '.DS_Store']
]
],
Parameter | Value |
---|---|
ignore |
要忽略的文件和目录名称列表。默认为 ['.svn', '.git', '.DS_Store']。 |
ttl |
指定缓存的生存时间,以分钟为单位。默认值为 10。当添加、更新或删除库项目时,缓存会自动失效。 |
imageExtensions |
与图像文档类型对应的文件扩展名。默认值为['gif', 'png', 'jpg', 'jpeg', 'bmp'] . |
videoExtensions |
与视频文档类型对应的文件扩展名。默认值为['mp4', 'avi', 'mov', 'mpg'] . |
audioExtensions |
与音频文档类型对应的文件扩展名。默认值为['mp3', 'wav', 'wma', 'm4a'] . |
Events
媒体管理器提供了一些events 您可以收听以提高可扩展性。
Event | Description | Parameters |
---|---|---|
folder.delete |
删除文件夹时调用 | (string) $path |
file.delete |
删除文件时调用 | (string) $path |
folder.rename |
重命名文件夹时调用 | (string) $originalPath ,(string) $newPath |
file.rename |
重命名文件时调用 | (string) $originalPath ,(string) $newPath |
folder.create |
创建文件夹时调用 | (string) $newFolderPath |
folder.move |
移动文件夹时调用 | (string) $path ,(string) $dest |
file.move |
移动文件时调用 | (string) $path ,(string) $dest |
file.upload |
上传文件时调用 | (string) $filePath ,(\Symfony\Component\HttpFoundation\File\UploadedFile) $uploadedFile |
要挂钩这些事件,要么扩展Backend\Widgets\MediaManager
直接上课:
Backend\Widgets\MediaManager::extend(function($widget) {
$widget->bindEvent('file.rename', function ($originalPath, $newPath) {
// Update custom references to path here
});
});
或通过全球收听Event
门面(每个事件都以media.
并将通过实例化Backend\Widgets\MediaManager
对象作为第一个参数):
Event::listen('media.file.rename', function($widget, $originalPath, $newPath) {
// Update custom references to path here
});
Troubleshooting
使用远程服务最常见的问题是 SSL 连接问题。如果您收到 SSL 错误,请确保您的服务器具有公共证书颁发机构 (CA) 的新 SSL 证书。