Skip to content

NTF metadata上传ipfs #1

@leno23

Description

@leno23

// 使用 Pinata API 上传
import pinataSDK from '@pinata/sdk';
import fs from 'fs';

const pinata = new pinataSDK('d6b2e5033bfbd419afe2', 'cd03888e7ad4e1fa5f3979e83ff9df1ed7b9f89b6ab73ce598b867e97b85d67c');

// 上传图片
async function uploadImageToPinata(imagePath) {
const readableStreamForFile = fs.createReadStream(imagePath);
const options = {
pinataMetadata: {
name: "NFT Image",
},
pinataOptions: {
cidVersion: 0
}
};

try {
    const result = await pinata.pinFileToIPFS(readableStreamForFile, options);
    console.log('Image IPFS Hash:', result.IpfsHash);
    return result.IpfsHash;
} catch (error) {
    console.error('Error uploading image:', error);
}

}

// 上传 metadata
async function uploadMetadataToPinata(metadata) {
const options = {
pinataMetadata: {
name: "NFT Metadata",
},
pinataOptions: {
cidVersion: 0
}
};

try {
    const result = await pinata.pinJSONToIPFS(metadata, options);
    console.log('Metadata IPFS Hash:', result.IpfsHash);
    return result.IpfsHash;
} catch (error) {
    console.error('Error uploading metadata:', error);
}

}

// 完整流程
async function uploadNFTData() {
// 1. 先上传图片
const imageHash = await uploadImageToPinata('./2.png');

// 2. 创建 metadata
const metadata = {
    name: "My Awesome NFT #1",
    description: "This is my first NFT!",
    image: `ipfs://${imageHash}`,
    attributes: [
        {
            trait_type: "Color",
            value: "Blue"
        },
        {
            trait_type: "Rarity",
            value: "Common"
        }
    ]
};

// 3. 上传 metadata
const metadataHash = await uploadMetadataToPinata(metadata);

console.log('Final metadata URI:', `ipfs://${metadataHash}`);
return `ipfs://${metadataHash}`;

}
uploadNFTData()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions