媒体经理

默认情况下,媒体管理器使用安装目录的 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,folderpath 参数:

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,folderpath 参数:

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.htmwn-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 证书。

豫ICP备18041297号-2