# Atualize um objeto no Object Storage

import DocButton from '~/components/webkit/DocButton.vue';
import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

Este guia descreve como você pode atualizar um objeto de um bucket do Object Storage usando a [API da Azion](https://api.azion.com/), [CLI da Azion](/pt-br/documentacao/produtos/azion-cli/visao-geral/), e [Azion Runtime](/pt-br/documentacao/runtime/api-reference/storage/).

## Atualizando um objeto de um bucket

<Tabs client:visible>
    <Fragment slot="tab.cli">CLI</Fragment>
    <Fragment slot="tab.runtime">Azion Runtime</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.cli">

## Requisitos

- [Azion CLI instalada](/pt-br/documentacao/produtos/azion-cli/visao-geral/#instalar-a-azion-cli). 
- [Um personal token configurado](/pt-br/documentacao/devtools/cli/globals/#token).

Para atualizar um bucket: 

```bash 
azion update edge-storage object 
```

A Azion CLI apresentará uma série de interações para que o objeto possa ser atualizado. Execute `azion update edge-storage bucket -h` para obter mais informações sobre os dados que podem ser atualizados. 

</Fragment >

<Fragment slot="panel.api">

Execute a seguinte requisição `PUT` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), `<bucket_name>` pelo nome do bucket, `<object_key>` pela chave do objeto, e `path/file.txt` com o caminho do arquivo novo:

<Code lang="bash" code={`
curl --location --request PUT 'https://api.azion.com/v4/storage/buckets/<bucket_name>/objects/<object_key>' \
--header 'Accept: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/octet-stream' \
--data '@path/file.txt'
`} />

Você deve receber uma resposta semelhante a esta:

```json
{
  "state": "executed",
  "data": {
    "object_key": "people-100.txt"
  }
}
```

</Fragment>

<Fragment slot="panel.runtime">

Você pode criar uma function para atualizar um objeto do seu bucket. Para fazer isso:

1. Acesse [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Function**.
2. Clique no botão **+ Function**.
3. Dê um nome para sua função. Exemplo: `object-update`.
4. Na guia **Code**, adicione o seguinte código JavaScript, passando o nome do seu bucket e a chave do objeto:

```js
import Storage from "azion:storage";

async function handleRequest(event) {
    try{
        const bucket = “mybucket”;
        const storage = new Storage(bucket);
        const key = "test";
        const inputStream = event.request.body;
        let contentLength = event.request.headers.get("content-length");
        await storage.put(key, inputStream, { "content-length": contentLength });
        return new Response("OK");
    }catch(error){
        return new Response(error, {status:500});
    }
}

addEventListener("fetch", (event) => {
    event.respondWith(handleRequest(event));
});
```

:::note 
Lembre-se de substituir "mybucket" pelo nome do seu bucket e "test" pela chave do objeto.
:::

5. Clique no botão **Save**.

:::note
Consulte a referência da [Object Storage API](/pt-br/documentacao/runtime/api-reference/storage/) para obter mais detalhes sobre as funções disponíveis para outros tipos de requisições.
:::

Uma vez que você tenha criado a function, você precisa criar uma application que irá servir de proxy do processo para o bucket e instanciar a function.

<DocButton href="/pt-br/documentacao/produtos/build/applications/primeiros-passos/" label="Primeiros passos de Applications" kind="secondary" target="_blank" size="medium" />
<DocButton href="/pt-br/documentacao/produtos/guias/build/instanciar-functions/" label="Consulte o guia de como instanciar functions" kind="secondary" target="_blank" size="medium" />

</Fragment>
</Tabs>