title | description | meta_tags | namespace | permalink | menu_namespace |
---|---|---|---|---|---|
Edge Storage API |
A Edge Functions Storage API é uma interface que permite o acesso ao Azion Edge Storage. Através dessa interface, é possível ler e escrever dados no storage e seus buckets. |
edge function, edge computing, storage, jamstack, apis |
documentation_runtime_storage |
/documentacao/devtools/runtime/api-reference/storage/ |
runtimeMenu |
A Edge Functions Storage API é uma interface que permite o acesso ao Azion Edge Storage. Através dessa interface, é possível ler e escrever dados no storage e seus buckets.
Para a utilização dessa API, é necessário importar e instanciar a classe Storage
, passando o nome do bucket.
Importação:
import Storage from "azion:storage";
Instanciação:
const storage = new Storage(bucket);
Parâmetro | Tipo | Descrição |
---|---|---|
bucket |
String | Nome de um bucket |
:::note A criação de um bucket é realizada durante um deploy de uma aplicação estática através da Azion CLI ou através de requições na API da Azion. :::
Objeto Storage
usado para acessar o Edge Storage.
O método Storage.put
é usado para inserir um novo objeto no storage.
:::note
Este é um método assíncrono e deve ser usado com await
ou event.waitUntil
.
:::
async Storage.put(key, value, options)
Parâmetro | Tipo | Descrição |
---|---|---|
key |
String | Identificador que permite a busca por um objeto no storage |
value |
ArrayBuffer ou ReadableStream | Conteúdo do objeto sendo armazenado. No caso de value implementar um ReadableStream, as APIs de Stream podem ser usadas e a opção content-length é obrigatória |
options |
Object | Os atributos options são descritos na tabela abaixo |
options
Para passar o parâmetro options
, você deve fornecer um objeto com os seguintes atributos:
Atributo | Tipo | Descrição |
---|---|---|
content-type |
String | O content-type do objeto sendo criado. É semelhante ao cabeçalho HTTP content-type e descreve como o conteúdo do Edge Storage deve ser tratado. content-type é opcional. O valor padrão é application/octet-stream |
content-length |
String | O tamanho do objeto a ser criado, em bytes. É obrigatório quando o valor é ReadableStream |
metadata |
Object | Qualquer objeto JavaScript contendo informações sobre o objeto que será armazenado no Storage. Todas as propriedades do objeto devem ser strings |
Sucesso | Erro |
---|---|
Nenhuma resposta | Lança um StorageError |
- Para persistir o corpo da requisição:
import Storage from "azion:storage";
async function handleRequest(event) {
try{
const bucket = "meubucket";
const storage = new Storage(bucket);
const key = "teste";
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));
});
- Para persistir um objeto JSON:
import Storage from "azion:storage";
async function handleRequest(event) {
try{
const bucket = "meubucket";
const storage = new Storage(bucket);
const key = "teste";
const data = JSON.stringify({
nome:"João",
endereco:"Abbey Road"
});
const buffer = new TextEncoder().encode(data);
await storage.put(key, buffer);
return new Response("OK");
}catch(error){
return new Response(error, {status:500});
}
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event));
});
- Para salvar um JSON com metadados:
import Storage from "azion:storage";
async function handleRequest(event) {
try{
const bucket = "meubucket";
const storage = new Storage(bucket);
const key = "teste2";
const data = JSON.stringify({
nome:"Paulo",
endereco:"Abbey Road"
});
const buffer = new TextEncoder().encode(data);
const options = { "content-type": "application/json",
"metadata": {
info:"informação de teste",
contador: "1",
}}
await storage.put(key, buffer, options);
return new Response("OK");
}catch(error){
return new Response(error, {status:500});
}
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event));
});
O método storage.get(key)
é usado para recuperar um objeto.
:::note
O método é assíncrono e deve ser usado com await
ou event.waitUntil
.
:::
async storage.get(key)
Parâmetro | Tipo | Descrição |
---|---|---|
key |
String | Identificador que permite a busca por um objeto no bucket |
Sucesso | Erro |
---|---|
Retorna um objeto da classe StorageObject |
Lança um StorageError |
- Para recuperar e retornar o conteúdo do storage:
import Storage from "azion:storage";
async function handleRequest(event) {
try{
const bucket = "meubucket";
const storage = new Storage(bucket);
const key = "teste";
const storageObject = await storage.get(key);
return new Response(storageObject.content);
}catch(error){
return new Response(error, {status:500});
}
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event));
});
- Para obter um JSON do storage:
import Storage from "azion:storage";
async function handleRequest(event) {
try{
const bucket = "meubucket";
const storage = new Storage(bucket);
const key = "teste";
const storageObject = await storage.get(key);
const data = new TextDecoder().decode(await storageObject.arrayBuffer());
return new Response(data);
}catch(error){
return new Response(error, {status:500});
}
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event));
});
- Para ler os metadados de um objeto:
import Storage from "azion:storage";
async function handleRequest(event) {
try{
const bucket = "meubucket";
const storage = new Storage(bucket);
const key = "teste2";
const storageObject = await storage.get(key);
return new Response(storageObject.metadata.get("info"));
}catch(error){
return new Response(error, {status:500});
}
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event));
});
O Storage.delete(key)
é usado para remover um objeto do Edge Storage.
:::note
O método é assíncrono e deve ser usado com await
ou event.waitUntil
.
:::
async Storage.delete(key)
Parâmetro | Tipo | Descrição |
---|---|---|
key |
String | Identificador que permite a busca por um objeto no bucket |
Sucesso | Erro |
---|---|
Nenhuma resposta | Lança um StorageError |
- Para excluir um objeto armazenado no Edge Storage:
import Storage from "azion:storage";
async function handleRequest(event) {
const bucket = "meubucket";
const storage = new Storage(bucket);
const key = "teste";
try{
await storage.delete(key);
}catch(error){
return new Response(error, {status:500});
}
return new Response("Ok");
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event));
});
O método Storage.list()
é usado para listar todos os objetos pertencentes ao bucket
específico.
:::note
O método é assíncrono e deve ser usado com await
ou event.waitUntil
.
:::
await storage.list()
Sucesso | Erro |
---|---|
Retorna StorageObjectList | Lança um StorageError |
- Listando objetos do Edge Storage:
import Storage from "azion:storage";
async function handleRequest(event) {
try{
const bucket = "meubucket";
const storage = new Storage(bucket);
const objectsList = await storage.list();
for (const entry of objectsList.entries) {
console.log(`chave: ${entry.key} tamanho: ${entry.content_length}`);
}
return new Response("Ok");
}catch(error){
return new Response(error, {status:500});
}
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event));
});
Método | Descrição |
---|---|
StorageObject.content |
Propriedade de leitura contendo um ReadableStream para o conteúdo armazenado no storage |
async StorageObject.arrayBuffer() |
Função assíncrona que retorna um ArrayBuffer com o conteúdo armazenado no storage. Este método consome o ReadableStream da propriedade de content |
StorageObject.metadata |
Propriedade de leitura contendo um objeto Map com os metadados do objeto armazenados no storage |
StorageObject.contentType |
Propriedade de leitura contendo o content-type do conteúdo armazenado no storage |
StorageObject.contentLength |
Propriedade de leitura contendo o tamanho em bytes do conteúdo armazenado no storage |