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.


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âmetroTipoDescrição
bucketStringNome de um bucket

Objeto Storage usado para acessar o Edge Storage.


O método Storage.put é usado para inserir um novo objeto no storage.

async Storage.put(key, value, options)
ParâmetroTipoDescrição
keyStringIdentificador que permite a busca por um objeto no storage
valueArrayBuffer ou ReadableStreamConteú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
optionsObjectOs atributos options são descritos na tabela abaixo

options

Para passar o parâmetro options, você deve fornecer um objeto com os seguintes atributos:

AtributoTipoDescrição
content-typeStringO 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-lengthStringO tamanho do objeto a ser criado, em bytes. É obrigatório quando o valor é ReadableStream
metadataObjectQualquer objeto JavaScript contendo informações sobre o objeto que será armazenado no Storage. Todas as propriedades do objeto devem ser strings
SucessoErro
Nenhuma respostaLança um StorageError
  1. 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));
});
  1. 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));
});
  1. 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.

async storage.get(key)
ParâmetroTipoDescrição
keyStringIdentificador que permite a busca por um objeto no bucket
SucessoErro
Retorna um objeto da classe StorageObjectLança um StorageError
  1. 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));
});
  1. 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));
});
  1. 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.

async Storage.delete(key)
ParâmetroTipoDescrição
keyStringIdentificador que permite a busca por um objeto no bucket
SucessoErro
Nenhuma respostaLança um StorageError
  1. 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.

await storage.list()
SucessoErro
Retorna StorageObjectListLança um StorageError
  1. 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étodoDescrição
StorageObject.contentPropriedade 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.metadataPropriedade de leitura contendo um objeto Map com os metadados do objeto armazenados no storage
StorageObject.contentTypePropriedade de leitura contendo o content-type do conteúdo armazenado no storage
StorageObject.contentLengthPropriedade de leitura contendo o tamanho em bytes do conteúdo armazenado no storage