javascriptinfrastructureintermediate

IPFS Upload with Pinata

Upload metadata or images to IPFS via Pinata's API for NFT metadata.

All snippets

Code

javascript
import fs from "fs";
import FormData from "form-data";

async function uploadToIPFS(filePath) {
  const form = new FormData();
  form.append("file", fs.createReadStream(filePath));

  const res = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.PINATA_JWT}`,
    },
    body: form,
  });

  const data = await res.json();
  return `ipfs://${data.IpfsHash}`;
}

// Upload NFT metadata JSON
async function uploadMetadata(metadata) {
  const res = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.PINATA_JWT}`,
    },
    body: JSON.stringify({ pinataContent: metadata }),
  });
  const data = await res.json();
  return `ipfs://${data.IpfsHash}`;
}

Explanation

Pinata is a popular IPFS pinning service. Upload files via multipart form data and metadata via JSON. The returned IpfsHash can be combined with an IPFS gateway URL (e.g., https://ipfs.io/ipfs/HASH) to serve NFT metadata.

ipfspinatastoragejavascript