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

# Carregar um blob no Title Storage

> Exemplo de código C simples para carregar um blob no Title Storage dos serviços XBOX usando XblTitleStorageUploadBlobAsync, com orientações sobre o tamanho do bloco e o tempo de vida do buffer.

Este tópico demonstra como carregar um blob no Title Storage dos serviços XBOX usando o exemplo de código C simples a seguir.

## Observações sobre os parâmetros de XblTitleStorageUploadBlobAsync

* O buffer que contém os dados do blob a serem carregados deve estar disponível durante toda a operação assíncrona. Você não deve modificar o buffer enquanto um upload estiver em andamento.

* Esse método usa um tamanho padrão se você não fornecer `preferredUploadBlockSize` ou se o tamanho padrão não estiver dentro do intervalo aceitável. O tamanho mínimo é de 1.024 bytes. O tamanho máximo é de 4.194.304 bytes. O tamanho padrão é de 262.144 bytes.

* Os blobs binários são carregados em várias partes de `preferredUploadBlockSize` se excederem esse tamanho. Nesse caso, recomendamos que você use tamanhos maiores. Se ocorrerem tempos limite, tente carregar novamente usando um tamanho menor.

#### C simples

```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();
}
```

## Veja também

[XAsyncBlock](/pt-BR/reference/system/xasync/structs/xasyncblock)

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

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

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


## Related topics

- [Código de exemplo do Title Storage](/pt-BR/services/xbox-services/storage/title-storage/how-to/live-title-storage-howto-nav.md)
- [Instruções](/pt-BR/services/xbox-services/storage/title-storage/how-to/index.md)
- [Baixar um blob do Title Storage](/pt-BR/services/xbox-services/storage/title-storage/how-to/live-downloading-title-storage-blob.md)
- [Excluir um blob do Title Storage](/pt-BR/services/xbox-services/storage/title-storage/how-to/live-deleting-title-storage-blob.md)
- [XblTitleStorageUploadBlobAsync](/pt-BR/reference/live/xsapi-c/title_storage_c/functions/xbltitlestorageuploadblobasync.md)
