> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 內容傳遞網路快速入門

> 從舊版 PlayFab CDN 依索引鍵儲存和提供遊戲資產，包括資料夾路徑、邊緣快取行為，以及上傳、覆寫和刪除的延遲。

<Info>
  PlayFab CDN 是舊版功能，僅支援至少有一個先前已設定 CDN 之遊戲的帳戶。對於有興趣使用內容管理解決方案的新 PlayFab 開發人員，我們建議使用 Azure CDN。若要開始使用，請參閱 [Azure CDN 文件](https://learn.microsoft.com/en-us/azure/cdn/)。
</Info>

PlayFab 內容傳遞網路 (CDN) 會將個別資產儲存為檔案，並以檔案名稱 (也稱為*索引鍵*) 唯一識別。這表示您會依索引鍵新增、更新、移除和擷取資產。

PlayFab CDN 允許依資料夾區隔資產。資產的資料夾路徑會成為*資產索引鍵*的一部分。

下列範例是儲存在名為 `Android` 之資料夾內的有效資產索引鍵。

`Android/Image.png`。

當使用者擷取資產時，其要求會自動路由到最近的邊緣位置，因此內容能以最佳效能傳遞。

不過，這可能會在檔案管理動作中造成延遲，如下列範例所示：

* **檔案上傳**：您的檔案會立即可供使用。

* **檔案覆寫**：在舊檔案被新檔案覆寫之前，使用者最多可能在 24 小時內仍看到舊檔案。

* **檔案刪除**：在刪除命令將檔案從所有邊緣位置移除期間，檔案最多會繼續存在 24 小時。

## 上傳資產

在使用者能夠擷取資產之前，必須先將資產上傳到 CDN。這可以在 **Game Manager** 中完成：

* 從左側功能表選取 **Content**。
* 選擇 **File Management** 索引標籤。
* 然後選取 **Upload Files**。

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-content-file-management-upload-files.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=8434341dcd92836b082c55dbaa661e4b" alt="Game Manager - Content - File Management - Upload Files" width="2560" height="1184" data-path="images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-content-file-management-upload-files.png" />

您可以：

* 選取多個 **Files (1)**。
* 每個選取的檔案都會出現在清單 **(2)** 中。
* 選取 **Upload Files** 按鈕 **(3)** 來提交您的檔案。

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-choose-and-upload-files.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=7c6bbd20066b2a6c40bdc062c8ec9603" alt="Game Manager - 選擇並上傳檔案" width="924" height="580" data-path="images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-choose-and-upload-files.png" />

* 上傳的檔案會出現在清單 **(1)** 中。

* 請記住，您也可以管理*資料夾*。
  * 若要建立資料夾，請選取 **New Folder** 按鈕 **(2)**。

* 填入 **Folder name (1)**。

* 選取 **Create Folder** 按鈕 **(2)**。

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-create-new-folder.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=b25109c958f0156cb00fd5a84d75ddbd" alt="Game Manager - 建立新資料夾" width="913" height="240" data-path="images/playfab/data-analytics/legacy/content-delivery-network/tutorials/game-manager-create-new-folder.png" />

這會在樹狀結構中建立新資料夾。接著您可以選取此資料夾，並以一般方式上傳檔案。

或者，您也可以使用管理 SDK 透過程式碼上傳資產。這是兩個步驟的程序：

1. 首先，呼叫 [GetContentUploadUrl](xref:titleid.playfabapi.com.admin.content.getcontentuploadurl) 並取得授權上傳的預先簽署 URL。
2. 然後，使用該 URL 發出 `HTTP PUT` 要求，提供您的資料，以及 (選擇性) 內容類型。

請考慮使用下方提供的程式碼片段，其中示範如何取得預先簽署 URL。

```csharp theme={null}
public void UploadFileToCDN(string key, byte[] content, string contentType = "binary/octet-stream") {
    GetUploadUrl(key, contentType, presignedUrl => {
        PutFile(presignedUrl, content, contentType);
    });
}

void GetUploadUrl(string key, string contentType, Action<string> onComplete) {
    PlayFabAdminAPI.GetContentUploadUrl(new GetContentUploadUrlRequest() {
        ContentType = contentType,
        Key = key
    }, result => onComplete(result.URL),
    error => Debug.LogError(error.GenerateErrorReport()));
}

void PutFile(string presignedUrl, byte[] content, string contentType = "binary/octet-stream") {
    // Implement your own PUT HTTP request here.
    // - Must use PUT method
    // - Must set content type Header
}
```

接著您可以透過 PlayFab Game Manager 檢查結果。請確定檔案位於清單中。

## 擷取資產

透過程式碼下載資產與上傳資產的方式相同。如前所述，這是兩個步驟的程序。

1. 首先，呼叫 [GetContentDownloadUrl](xref:titleid.playfabapi.com.client.content.getcontentdownloadurl) 並取得授權下載的預先簽署 URL。
2. 接著使用預先簽署 URL 發出 `HTTP GET` 要求，並擷取資料。

請考慮使用下方提供的程式碼片段，其中示範此程序的基本架構。

```csharp theme={null}
public void DownloadFileFromCDN(string key) {
    GetDownloadUrl(key, presignedUrl =>
    {
        GetFile(presignedUrl);
    });
}

void GetDownloadUrl(string key, Action<string> onComplete) {
    PlayFabClientAPI.GetContentDownloadUrl(new GetContentDownloadUrlRequest() {
        Key = key,
        ThruCDN = true
    }, result => onComplete(result.URL),
    error => Debug.LogError(error.GenerateErrorReport()));
}

void GetFile(string preauthorizedUrl) {
    // Implement your own GET HTTP request here.
}
```

如前所述，CDN 在檔案更新方面可能會有延遲。在開發期間，強制擷取最新的檔案有時很有用。

[GetContentDownloadUrl](xref:titleid.playfabapi.com.client.content.getcontentdownloadurl) 呼叫可讓您將 `ThruCDN` 參數設定為 `False`。傳回的 URL 會指向未快取的最新檔案。

<Note>
  您發佈的遊戲用戶端*絕對不應*使用此選項！
</Note>


## Related topics

- [內容傳遞網路](/zh-TW/services/playfab/data-analytics/legacy/content-delivery-network/index.md)
- [報告快速入門](/zh-TW/services/playfab/data-analytics/learn-data/reports/quickstart.md)
- [PlayFab 資料與分析文件](/zh-TW/services/playfab/data-analytics/index.md)
- [使用者產生的內容 (UGC) 快速入門](/zh-TW/services/playfab/economy-monetization/economy-v2/ugc/quickstart.md)
- [Party 快速入門](/zh-TW/services/playfab/multiplayer/networking/quickstart.md)
