For hellocurator we want to let users upload an image through our application. The solution of choice for decentralized storing is IPFS.
IPFS is a distributed system for storing and accessing files, websites, applications, and data.
I recommend reading the doc if you want to know more about the concepts.
Since our app is written in Next.js, we will use React with a custom hook. But you can take the functionality with any other JavaScript framework.
The code
We will use the ipfs-http-client library.
npm i ipfs-http-client
import { create } from "ipfs-http-client"; import { ImportCandidate } from "ipfs-core-types/src/utils"; const client = create({ url: "https://ipfs.infura.io:5001/api/v0" }); const useIpfs = () => { const upload = async (file: ImportCandidate) => { try { const added = await client.add(file); const url = `https://ipfs.infura.io/ipfs/${added.path}`; return url; } catch (error) { console.error("Error uploading file: ", error); } }; return { upload, }; }; export default useIpfs;
The basic functionality takes 3 lines of code:
- create a client with a gateway. There are different types of gateway for IFPS. For our example, we use a free one by infura.io, but you can use other services or create your own.
- Import a file or data into IPFS
- Get the path of the stored file
You can use this hook for storing anything you want on IPFS.
const onSubmit: SubmitHandler<FormValues> = async (data) => { const image = data.image[0]; /* upload an image */ const imageUrl = await upload(image); /* upload a file */ const fileUrl = await upload(data.file); /* upload a text */ const textUrl = await upload("hello!"); /* upload a JSON */ const jsonUrl = await upload( JSON.stringify({ title: "hellocurator", description: "We’re happy to introduce hellocurator", }) ); /* etc. */ };
Top comments (0)