Almacenar datos - Integraci贸n web3Storage

Subiendo los datos de tu evento

Cree una nueva carpeta en la carpeta pages llamada api y cree un nuevo archivo o file dentro llamado store-event-data.js.

En la parte superior de nuestro nuevo file, necesitaremos importar web3.storage y el m贸dulo path.

import { Web3Storage, File, getFilesFromPath } from "web3.storage";
const { resolve } = require("path");

Tendremos que exportar una funci贸n handle predeterminada para manejar las solicitudes entrantes. Aqu铆 podemos verificar si la solicitud es un POST y devolver un error si no lo es. De lo contrario, podemos almacenar los datos del evento.

export default async function handler(req, res) {
  if (req.method === "POST") {
    return await storeEventData(req, res);
  } else {
    return res
      .status(405)
      .json({ message: "Method not allowed", success: false });
  }
}

Cree una nueva funci贸n as铆ncrona llamada storeEventData. Esta funci贸n debe intentar obtener los datos del evento desde el cuerpo de la solicitud y almacenar los datos, o devolver un error si no fue exitoso. Tras un almacenamiento exitoso, devolveremos el cid que apunta a un directorio IPFS del archivo que acabamos de almacenar.

Dentro de esta funci贸n, hay dos funciones que ser谩n llamadas. La primera es una funci贸n as铆ncrona makeFileObjects. El prop贸sito de esta funci贸n es crear un archivo json que incluya metadatos pasados desde el objeto req.body. La siguiente funci贸n que llamamos es la funci贸n storeFiles, que almacenar谩 ese archivo json en Web3.storage.

async function storeEventData(req, res) {
  const body = req.body;
  try {
    const files = await makeFileObjects(body);
    const cid = await storeFiles(files);
    return res.status(200).json({ success: true, cid: cid });
  } catch (err) {
    return res
      .status(500)
      .json({ error: "Error creating event", success: false });
  }
}

Cree una nueva funci贸n as铆ncrona llamada makeFileObjects. Esta funci贸n crear谩 un Buffer a partir del cuerpo donde se utiliz贸 stringify().

Esta funci贸n tambi茅n buscar谩 la imagen desde body.image. Podemos usar una funci贸n de web3.storage llamada getFilesFromPath para obtener la imagen de nuestra carpeta de im谩genes. Esto devolver谩 la imagen en un array, por lo que podemos enviar nuestro file de data a este array para que podamos cargar tanto la imagen como los datos del evento al mismo tiempo. Podemos crear un nuevo File desde buffer al que podemos llamar "data.json", y enviarlo al array files.

async function makeFileObjects(body) {
  const buffer = Buffer.from(JSON.stringify(body));

  const imageDirectory = resolve(process.cwd(), `public/images/${body.image}`);
  const files = await getFilesFromPath(imageDirectory);

  files.push(new File([buffer], "data.json"));
  return files;
}

En una nueva funci贸n as铆ncrona llamada storeFiles, podemos cargar nuestros archivos con el m茅todo ya integrado client.put y retornar el id del contenido.

En makeStorageClient podemos acceder a nuestra API key para Web3.Storage y conectarnos al cliente.

function makeStorageClient() {
  return new Web3Storage({ token: process.env.WEB3STORAGE_TOKEN });
}

Una vez que hayamos creado nuestro cliente Web3Storage, podemos llamar al m茅todo put en el cliente para cargar nuestra matriz de archivos.

async function storeFiles(files) {
  const client = makeStorageClient();
  const cid = await client.put(files);
  return cid;
}

Cuando nuestros archivos han sido cargados, client.put devuelve un identificador de contenido (CID). Este CID es el hash 煤nico que almacenaremos en el blockchain y usaremos para recuperar nuestros archivos.


Escritoras: Busayo, Sarah Z, Sarah Schwartz, Traductoras: Dami, Brenda, Caro Meneses

Last updated