企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 媒体 默认情况下,介质管理器使用安装目录的storage / app / media子目录。要使用Amazon S3或Rackspace CDN,您应该更新系统配置。 > 您需要先安装[Drivers插件,](https://www.kancloud.cn/followme/octobercms/1073836#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文档](https://www.kancloud.cn/followme/octobercms/1073836#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'\]\*\*。## **事件** 媒体管理器提供了一些您可以监听的[事件](https://www.kancloud.cn/followme/octobercms/1073836#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证书。