[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文檔
- 附錄
- 單元測試
- 質量指南
- 開發指南