> ## 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.

# 將 Blob 上傳至遊戲儲存空間

> 使用 XblTitleStorageUploadBlobAsync 將 Blob 上傳至 XBOX 服務遊戲儲存空間的 flat C 程式碼範例，並提供區塊大小與緩衝區存留期指引。

本主題使用下列 flat C 程式碼範例，示範如何將 Blob 上傳至 XBOX 服務遊戲儲存空間。

## XblTitleStorageUploadBlobAsync 參數的注意事項

* 包含要上傳之 Blob 資料的緩衝區，必須在非同步作業期間持續可用。上傳進行期間，您不應修改緩衝區。

* 如果您未提供 `preferredUploadBlockSize`，或其大小不在可接受的範圍內，此方法會使用預設大小。最小大小為 1,024 位元組，最大大小為 4,194,304 位元組，預設大小為 262,144 位元組。

* 如果二進位 Blob 超過 `preferredUploadBlockSize`，就會以多個該大小的區塊上傳。在此情況下，建議您使用較大的大小。如果發生逾時，您應該使用較小的大小重試上傳。

#### Flat C

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = blobBuffer.get();
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock };    // Take over ownership of XAsyncBlock*.
    std::unique_ptr<std::vector<uint8_t>> blobBuffer{ static_cast<std::vector<uint8_t>*>(asyncBlock->context) };
    HRESULT hr = XblTitleStorageUploadBlobResult(asyncBlock, &blobMetadata);
};

XblTitleStorageBlobMetadata blobMetadata{};
pal::strcpy(blobMetadata.displayName, displayName.size() + 1, displayName.c_str());
pal::strcpy(blobMetadata.serviceConfigurationId, XBL_SCID_LENGTH, scid);
pal::strcpy(blobMetadata.blobPath, blobPath.size() + 1, blobPath.c_str());
blobMetadata.storageType = storageType;
blobMetadata.blobType = blobType;
time(&blobMetadata.clientTimestamp);

HRESULT hr = XblTitleStorageUploadBlobAsync(
    xboxLiveContext,
    blobMetadata,
    reinterpret_cast<const uint8_t*>(blobBuffer->data()),
    blobBufferSize,
    eTagMatchCondition,
    preferredUploadBlockSize, //    Optional .
    asyncBlock.get()
);

if (SUCCEEDED(hr))
{
    // The call succeeded, so release std::unique_ptr ownership of XAsyncBlock* because
    // the callback takes over ownership. If the call fails, however, std::unique_ptr keeps
    // ownership and deletes XAsyncBlock*.
    asyncBlock.release();
    blobBuffer.release();
}
```

## 另請參閱

[XAsyncBlock](/zh-TW/reference/system/xasync/structs/xasyncblock)

[XblTitleStorageBlobMetadata](/zh-TW/reference/live/xsapi-c/title_storage_c/structs/xbltitlestorageblobmetadata)

[XblTitleStorageUploadBlobAsync](/zh-TW/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageuploadblobasync)

[XblTitleStorageUploadBlobResult](/zh-TW/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageuploadblobresult)


## Related topics

- [遊戲儲存空間範例程式碼](/zh-TW/services/xbox-services/storage/title-storage/how-to/live-title-storage-howto-nav.md)
- [操作說明](/zh-TW/services/xbox-services/storage/title-storage/how-to/index.md)
- [從遊戲儲存空間下載 Blob](/zh-TW/services/xbox-services/storage/title-storage/how-to/live-downloading-title-storage-blob.md)
- [從遊戲儲存空間刪除 Blob](/zh-TW/services/xbox-services/storage/title-storage/how-to/live-deleting-title-storage-blob.md)
- [取得遊戲儲存空間 Blob 中繼資料](/zh-TW/services/xbox-services/storage/title-storage/how-to/live-getting-title-storage-blob-metadata.md)
