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

如何使用PHP cURL上传文件到Pinata IPFS并解决KEYS_MUST_BE_STRINGS报错

问题原因

你遇到的KEYS_MUST_BE_STRINGS报错,是因为将API密钥放在请求Body中提交时,Pinata接口解析出现了类型识别错误,同时你的代码没有正确封装待上传的文件,导致上传请求不符合接口要求。

修复后完整代码

<?php
$url = "https://api.pinata.cloud/pinning/pinFileToIPFS";
// 替换为你自己的Pinata密钥
$apiKey = '00xxxxxx';
$apiSecret = 'e1xxxxxxxxxxxxxxxxxxcccccccc';
$filePath = 'logo.png';

// 构造上传数据,用CURLFile封装文件
$postData = [
    'file' => new CURLFile($filePath, mime_content_type($filePath), basename($filePath))
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
// 密钥放请求头,避免Body解析类型错误,符合官方调用规范
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "pinata_api_key: {$apiKey}",
    "pinata_secret_api_key: {$apiSecret}"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo "CURL错误:" . curl_error($ch);
} else {
    echo $response;
}

curl_close($ch);
?>

关键修改说明

  • 用CURLFile对象封装待上传文件,指定文件MIME类型和文件名,让cURL正确识别为文件上传请求
  • 将API密钥从请求Body移到请求头中,彻底解决密钥类型识别的报错,同时符合Pinata的官方调用规范
  • 新增CURLOPT_RETURNTRANSFER配置,将接口返回结果赋值给变量,方便后续逻辑处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:24:03