NFT市场IPFS数据上传失败:HTTPError及网关不支持问题求助
问题解决:Infura IPFS上传失败+公共网关失效
问题根源
- 上传报错「project id required」:Infura IPFS已不再支持未认证的匿名上传,必须使用你的Infura项目ID和密钥进行身份验证。
- 公共网关失效:Infura正式停用了
https://ipfs.infura.io/ipfs/公共网关,所有旧链接无法再访问,需切换到专用网关或其他IPFS网关。
解决步骤
1. 获取Infura IPFS项目凭证
- 登录Infura控制台,创建新IPFS项目(或使用已有项目)。
- 复制项目的Project ID和Project Secret。
2. 初始化IPFS客户端时添加认证
补充/修改你的IPFS客户端初始化代码(原代码未展示此部分):
import { create } from 'ipfs-http-client'; // 替换为你的Project ID和Project Secret const projectId = 'YOUR_INFURA_PROJECT_ID'; const projectSecret = 'YOUR_INFURA_PROJECT_SECRET'; const auth = 'Basic ' + Buffer.from(projectId + ':' + projectSecret).toString('base64'); const client = create({ host: 'ipfs.infura.io', port: 5001, protocol: 'https', headers: { authorization: auth, }, });
3. 替换所有IPFS网关URL
把代码中所有https://ipfs.infura.io/ipfs/替换为你的Infura专用网关,格式为https://${projectId}.ipfs.infura-ipfs.io/ipfs/
修改后的上传函数示例:
async function onChange(e) { const file = e.target.files[0]; try { const added = await client.add(file, { progress: (prog) => console.log(`received: ${prog}`), }); // 替换为专用网关 const url = `https://${projectId}.ipfs.infura-ipfs.io/ipfs/${added.path}`; setFileUrl(url); console.log(fileUrl); } catch (error) { console.log("Error uploading file: ", error); } } async function uploadToIPFS() { const { name, description, price } = formInput; if (!name || !description || !price || !fileUrl) return; const data = JSON.stringify({ name, description, image: fileUrl, }); try { const added = await client.add(data); // 替换为专用网关 const url = `https://${projectId}.ipfs.infura-ipfs.io/ipfs/${added.path}`; console.log(url); return url; } catch (error) { console.log("Error uploading file: ", error); } }
4. 测试验证
- 重新运行代码,尝试上传文件,确认「project id required」错误消失。
- 访问新生成的IPFS链接,确认能正常返回JSON数据。
内容的提问来源于stack exchange,提问作者Umer Arif
相关产品推荐
相关产品推荐

