# Faça upload de um objeto no Object Storage

Este guia descreve o processo de upload de um objeto para um bucket do Object Storage usando o [Console da Azion](https://console.azion.com/object-storage), a [API da Azion](https://api.azion.com/), [Azion CLI](/pt-br/documentacao/produtos/azion-cli/visao-geral/), e [Azion Runtime](/pt-br/documentacao/runtime/api-reference/storage/).

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

## Fazendo o upload de um objeto para um bucket

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


<Fragment slot="panel.console">

No [Console](https://console.azion.com/object-storage) da Azion, você pode atualizar um bucket seguindo estes passos:

1. Acesse o menu **Object Storage** no menu Produtos.
2. Na página Object Storage, clique no bucket que deseja atualizar.
3. Arraste os arquivos para adicioná-los ao seu bucket ou clique no botão "Add to files".

![Adicionar arquivos ao bucket](/assets/docs/images/uploads/storage-add-files-to-bucket-console.png)

</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 fazer o upload de um objeto para um bucket do Object Storage:

```bash 
azion create edge-storage object --bucket-name bucketname  --source pathtoyourfile --object-key objectname
```

</Fragment>

<Fragment slot="panel.api">

Para fazer o upload de um objeto, execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), `<bucket_name>` pelo nome do seu bucket, `<object_key>` por um ID ou nome para o objeto, o header `Content-Type` com o tipo MIME a ser enviado, e o objeto enviado em formato binário:

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

Você deve receber a seguinte resposta:

```json
{
    "state": "executed",
    "data": {
        "object_key": "folder/csv-file"
    }
}
```

</Fragment>

<Fragment slot="panel.runtime">

Você pode criar uma function para fazer o upload de objetos para seu bucket usando um comando `POST` e verificar se um objeto está disponível usando um comando `GET`. Para fazer isso:

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

```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á fazer o proxy para o processo de upload do 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>