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

# Title Storage에 블롭 업로드

> XblTitleStorageUploadBlobAsync를 사용하여 XBOX 서비스 Title Storage에 블롭을 업로드하는 Flat C 코드 샘플과 블록 크기 및 버퍼 수명 안내입니다.

이 항목에서는 다음 flat C 코드 예제를 사용하여 XBOX 서비스 Title Storage에 블롭을 업로드하는 방법을 보여줍니다.

## XblTitleStorageUploadBlobAsync 매개 변수에 대한 참고 사항

* 업로드할 블롭 데이터가 들어 있는 버퍼는 비동기 작업이 진행되는 동안 사용할 수 있어야 합니다. 업로드가 진행 중일 때는 버퍼를 수정하면 안 됩니다.

* `preferredUploadBlockSize`를 제공하지 않거나 기본 크기가 허용 가능한 범위 내에 없는 경우 이 메서드는 기본 크기를 사용합니다. 최소 크기는 1,024바이트입니다. 최대 크기는 4,194,304바이트입니다. 기본 크기는 262,144바이트입니다.

* 이진 블롭이 `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](/reference/system/xasync/structs/xasyncblock)

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

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

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


## Related topics

- [Title Storage 예제 코드](/ko/services/xbox-services/storage/title-storage/how-to/live-title-storage-howto-nav.md)
- [XblTitleStorageUploadBlobResult](/ko/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageuploadblobresult.md)
- [XblTitleStorageUploadBlobAsync](/ko/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageuploadblobasync.md)
- [Partner Center에서 Title Storage 구성](/ko/services/xbox-services/storage/title-storage/config/live-title-storage-portal-config.md)
- [XblTitleStorageETagMatchCondition](/ko/reference/live/xsapi-c/title_storage_c/enums/xbltitlestorageetagmatchcondition.md)
