You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pinata的NFT Marketplace中createNFT函数报400错误求助

解决Pinata创建NFT元数据时的400 Bad Request错误

核心错误原因

你的createNFT函数误用了Pinata的接口:pinFileToIPFS是用来上传二进制文件(比如图片)的接口,而上传JSON格式的NFT元数据应该使用**pinJSONToIPFS**接口,这是导致400错误的直接原因。

其他潜在问题

  • 认证方式冗余:请求头同时传入了API Key/Secret和JWT Token,Pinata只需要其中一种认证方式即可,重复传入可能引发异常。
  • 错误日志不完整:当前catch块只打印了错误概况,无法获取Pinata返回的具体错误提示,不利于排查问题。

修改后的代码示例

修正的createNFT函数

//@dev: Create NFT function
const createNFT = async (name, price, image, description, router) => {
  if (!name || !description || !price || !image) {
    console.log("Data Is Missing");
    return;
  }
  // 构造符合NFT标准的元数据结构
  const nftMetadata = {
    name,
    description,
    image,
    // 可选:添加ERC标准要求的额外字段,比如属性
    // attributes: []
  };

  try {
    // 替换为正确的JSON上传接口
    const resFile = await axios({
      method: "POST",
      url: "https://api.pinata.cloud/pinning/pinJSONToIPFS",
      data: nftMetadata, // axios会自动处理JSON序列化,无需手动stringify
      headers: {
        // 二选一:保留API Key/Secret 或者 JWT,不要同时使用
        pinata_api_key: key,
        pinata_secret_key: secret_key,
        "Content-Type": `application/json`
        // 若使用JWT,则替换上面两行:
        // Authorization: `Bearer ${pinata_JWT}`
      },
    });
    
    const metadataIpfsUrl = `https://gateway.pinata.cloud/ipfs/${resFile.data.IpfsHash}`;
    console.log("NFT元数据IPFS地址:", metadataIpfsUrl);

    // 注意:传给智能合约的应该是元数据的IPFS地址,而非图片地址
    await createSale(metadataIpfsUrl, price);
    router.push("/searchPage");
  } catch (error) {
    // 打印Pinata返回的具体错误信息,方便排查
    console.log("Error while creating NFT:", error.response?.data || error.message);
  }
};

额外优化建议

  1. 统一认证方式:选择API Key/Secret或JWT中的一种,避免重复传入导致的潜在问题。
  2. 元数据规范:确保元数据符合ERC721/ERC1155标准,比如image字段必须是完整的IPFS网关地址或可访问的URL,必要时添加attributes字段丰富NFT属性信息。
  3. 错误处理增强:在catch块中优先打印error.response.data,Pinata的400错误通常会返回具体的错误描述(如"invalid JSON structure"或"unsupported endpoint"),能快速定位问题。

内容的提问来源于stack exchange,提问作者Phanh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:30:57