[TOC]
默认情况下,介质管理器使用安装目录的storage / app / media子目录。要使用Amazon S3或Rackspace CDN,您应该更新系统配置。
> 您需要先安装[Drivers插件,](#3)然后才能使用Amazon S3或Rackspace CDN功能。
请注意,更改介质管理器配置后,应重置其缓存。您可以按“媒体管理器”工具栏中的“**刷新”**按钮来执行此操作。
## **配置Amazon S3访问**
要将Amazon S3与OctoberCMS一起使用,您应该在存储桶和API用户中创建S3存储桶,文件夹。
注册Amazon AWS账户或使用现有帐户登录AWS Console。打开S3管理面板。创建一个新存储桶并为其分配任何名称(存储桶的名称将是您的公共文件URL的一部分)。
在存储桶中创建**媒体**文件夹。文件夹名称无关紧要。此文件夹将是媒体库的根目录。
默认情况下,无法直接访问S3存储桶中的文件。要使存储桶处于公共状态,请返回存储桶列表并单击存储桶。单击右侧边栏中的“**属性”**按钮。展开“**权限”**选项卡。单击**编辑存储桶策略**链接。将以下代码粘贴到策略弹出窗口。将桶名称替换为您的实际存储桶名称:
~~~
{
"Version": "2008-10-17",
"Id": "Policy1397632521960",
"Statement": [
{
"Sid": "Stmt1397633323327",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKETNAME/*"
}
]
}
~~~
单击“**保存”**按钮以应用策略。该策略提供对存储桶中所有文件夹和目录的公共只读访问权限。如果您打算将存储桶用于其他需求,则可以设置对存储桶中特定文件夹的公共访问权限,只需在**资源**值中指定目录名称:
~~~
"arn:aws:s3:::BUCKETNAME/media/*"
~~~
您还应该创建一个API用户,OctoberCMS将使用该用户来管理存储桶文件。在AWS控制台中,转到IAM部分。转到“用户”选项卡并创建新用户。用户名无关紧要。确保在创建新用户时选中“为每个用户生成访问密钥”复选框。AWS创建用户后,它允许您查看安全凭证 - 用户**访问密钥ID**和**秘密访问密钥**。复制密钥并将其放入临时文本文件中。
返回用户列表,然后单击刚刚创建的用户。在“**权限”**部分中,单击“**附加策略”**按钮。在列表中选择**AmazonS3FullAccess**策略,然后单击**Attach Policy**按钮。
现在您拥有更新OctoberCMS配置的所有信息。打开**config / filesystem.php**脚本并找到**磁盘**部分。它已包含s3配置,您需要替换API凭据和存储桶信息参数:
| 参数 | 值 |
| --- | --- |
| **key** | 您之前创建的用户的**访问密钥ID**值。 |
|**secret** | 您创建的用户的**秘密访问密钥**值。 |
| **bucket** | 你的桶名。 |
| **region** | 桶区域代码,见下文。 |
您可以在存储区属性中的S3管理控制台中找到存储区域。“属性”选项卡显示区域名称,例如Oregon。S3驱动程序配置需要存储桶代码。使用此表查找存储桶的代码(您还可以查看[AWS文档](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)):
| 区域 | 码 |
| --- | --- |
| **美国标准** | us-east-1 |
| **美国西部(俄勒冈州)** | us-west-2 |
| **美国西部(加利福尼亚州北部)** | us-west-1 |
| **欧盟(爱尔兰)** | eu-west-1 |
| **EU(法兰克福)** | eu-central-1 |
| **亚太地区(新加坡)** | ap-southeast-1 |
| **亚太地区(悉尼)** | ap-southeast-2 |
| **亚太(东京)** | ap-northeast-1 |
| **南美洲(圣保罗)** | sa-east-1|
更新后的配置示例:
~~~
'disks' => [
...
's3' => [
'driver' => 's3',
'key' => 'XXXXXXXXXXXXXXXXXXXX',
'secret' => 'xxxXxXX+XxxxxXXxXxxxxxxXxxXXXXXXXxxxX9Xx',
'region' => 'us-west-2',
'bucket' => 'my-bucket'
],
...
]
~~~
保存**config / filesystem.php**脚本并打开**config / cms.php**脚本。找到部分**存储**。在**media**参数更新**磁盘**,**文件夹**和**路径**参数中:
| 参数 | 值 |
| --- | --- |
|**disk** | 使用**s3**值。 |
| **folder** | 您在S3存储桶中创建的文件夹的名称。 |
|**path** | 存储桶中文件夹的公共路径,请参见下文。 |
要获取文件夹的路径,请打开AWS控制台并转到S3部分。导航到存储桶,然后单击您之前创建的文件夹。将任何文件上传到该文件夹,然后单击该文件。单击右侧边栏中的“**属性”**按钮。文件URL位于**Link**参数中。复制URL并从中删除文件名和尾部斜杠。
示例存储配置:
~~~
'storage' => [
...
'media' => [
'disk' => 's3',
'folder' => 'media',
'path' => 'https://s3-us-west-2.amazonaws.com/your-bucket-name/media'
]
]
~~~
恭喜!现在,您已准备好将Amazon S3与OctoberCMS配合使用。请注意,您还可以配置Amazon CloudFront CDN以使用您的存储桶。本主题未在本文档中介绍,请参阅[CloudFront文档](#3)。配置CloudFront后,您需要更新存储配置中的**path**参数。
## **配置Rackspace CDN访问**
要将Rackspace CDN与OctoberCMS一起使用,您应该在容器和API用户中创建Rackspace CDN容器,文件夹。
登录Rackspace管理控制台并导航到Storage / Files页面。创建一个新容器。容器名称无关紧要,它将成为公共文件URL的一部分。为新容器选择**公共(启用CDN)**类型。
在容器中创建**媒体**文件夹。文件夹名称无关紧要。此文件夹将是媒体库的根目录。
您应该创建一个API用户,OctoberCMS将使用该用户来管理CDN容器中的文件。在Rackspace控制台中打开帐户/用户管理页面。单击**创建用户**按钮。填写用户名(例如october.cdn.api),密码,安全问题和答案。在**Product Access**部分中,选择**Custom,**然后在CDN行中选择**Admin**。在“**帐户”**部分中使用“**无访问权”**角色,并在“**联系信息”**部分中使用**技术联系**人类保存用户帐户。保存帐户后,您将看到带有**API密钥**的“登录详细信息”部分包含您需要在OctoberCMS配置文件中使用的值的行。
现在您拥有更新OctoberCMS配置的所有信息。打开**config / filesystem.php**脚本并找到**磁盘**部分。它已包含Rackspace配置,您需要替换API凭据和容器信息参数:
| 参数 | 值 |
| --- | --- |
| **username** | Rackspace用户名(例如october.cdn.api)。 |
| **key** | 您可以从Rackspace用户个人资料页面复制的用户**API密钥**。 |
| **container** | 容器名称。 |
| **region** | 桶区域代码,见下文。 |
| **endpoint** | 保持原样。 |
| **region**| 您可以在Rackspace控制面板的CDN容器列表中找到该区域。代码是一个3个字母的值,例如它是芝加哥的**ORD**。 |
更新后的配置示例:
~~~
'disks' => [
...
'rackspace' => [
'driver' => 'rackspace',
'username' => 'october.api.cdn',
'key' => 'xx00000000xxxxxx0x0x0x000xx0x0x0',
'container' => 'my-bucket',
'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
'region' => 'ORD'
],
...
]
~~~
保存**config / filesystem.php**脚本并打开**config / cms.php**脚本。找到部分**存储**。在**media**参数更新**磁盘**,**文件夹**和**路径**参数中:
| 参数 | 值 |
| --- | --- |
| **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与OctoberCMS一起使用。
## **音频和视频播放器**
默认情况下,系统使用HTML5音频和视频标签来呈现音频和视频文件:
~~~
<video src="video.mp4" controls></video>
~~~
要么
~~~
<audio src="audio.mp3" controls></audio>
~~~
可以覆盖此行为。如果有**oc-audio-player.html**和**oc-video-player.html**CMS部分,它们将用于显示音频和视频内容。在partials内部使用变量**src**输出到源文件的链接。例:
~~~
<video src="{{ src }}" width="320" height="200" controls preload></video>
~~~
如果您不想使用HTML5播放器,则可以在部分中提供任何其他标记。有一个[第三方脚本](https://html5media.info/)可以支持旧版浏览器中的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' => [
...
'ignore' => ['.svn', '.git', '.DS_Store']
]
],
~~~
| 参数 | 值 |
| --- | --- |
| **ignore** | 要忽略的文件和目录名称列表。默认为\['.svn','。git','。DS\_Store'\]。 |
| **ttl**| 指定缓存生存时间,以分钟为单位。默认值为10.添加,更新或删除库项目时,缓存会自动失效。 |
| **imageExtensions** | 与Image文档类型对应的文件扩展名。默认值为**\['gif','png','jpg','jpeg','bmp'\]**。 |
| **videoExtensions** | 与视频文档类型对应的文件扩展名。默认值为**\['mp4','avi','mov','mpg'\]**。 |
| **audioExtensions** | 与音频文档类型对应的文件扩展名。默认值为**\['mp3','wav','wma','m4a'\]**。 |
## **事件**
媒体管理器提供了一些您可以监听的[事件](#3),以提高可扩展性。
| 事件 | 描述 | 参数 |
| --- | --- | --- |
| **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`Facade全局监听(每个事件都以前缀为例,`media.`并将实例化`Backend\Widgets\MediaManager`对象作为第一个参数传递):**
~~~
Event::listen('media.file.rename', function($widget, $originalPath, $newPath) {
// Update custom references to path here
});
~~~
## **故障排除**
使用远程服务的最常见问题是SSL连接问题。如果您收到SSL错误,请确保您的服务器具有公共证书颁发机构(CA)的新SSL证书。
- 安装程序
- 安装
- 配置
- CMS
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 标记指南
- AJAX
- 介绍
- 事件处理
- 更新部件
- 数据属性API
- JavaScript API
- 额外特征
- 主题
- 开发主题
- 插件
- 注册
- 版本
- 使用Composer
- 构建组件
- 设置和配置
- 本地化
- 任务调度
- 扩展插件
- 后台
- 控制器和AJAX
- 视图和部件
- 小工具
- 表单
- 列表
- 关联
- 重新排序
- 导入导出
- 用户和权限
- 用户界面指南
- 数据库
- 基本用法
- 结构
- 查询构造器
- 模型
- 关联
- 附件
- 集合
- 访问器和修改器
- 序列化
- 特性
- 行为
- 服务
- 应用
- 行为
- 缓存
- 集合
- 错误&日志
- 事件
- 表单&HTML
- 文件系统/CDN
- 哈希&加密
- 助手函数
- 邮件
- 分页
- 分析器
- 队列
- 请求&输入
- 响应&视图
- 路由
- Session
- 验证
- 控制台
- 命令
- 脚手架
- 开发
- API文档
- 附录
- 单元测试
- 质量指南
- 开发指南