ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[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证书。