使用Infura的IPFS API上传文件后无法查看内容的问题
IPFS文件上传失败排查与解决
上传是否成功?
没有真正成功上传目标文件。从你的脚本返回结果能看出:response2.text输出的是newimages/1.png——这说明你上传的不是图片文件的二进制内容,而是把文件路径字符串当成了文件内容提交了。再加上脚本最后执行了pin/rm操作,把这个错误生成的对象也取消了固定,自然在任何地方都看不到有效内容。
问题根源
- 文件上传参数错误:
requests.post的files参数需要传入打开的二进制文件对象,而你直接传了字符串格式的文件路径,导致IPFS存储的是路径文本而非图片内容。 - 主动取消文件固定:默认情况下,
/api/v0/add操作会自动固定上传的对象,但你最后调用了/api/v0/pin/rm,直接取消了该对象的固定,Infura后台不会留存,IPFS网络也无法长期获取。
修正后的测试代码
import requests # 以二进制只读模式打开目标文件,这是正确的文件上传方式 files = { 'file': open('newimages/1.png', 'rb') } # 上传文件到Infura IPFS(默认自动固定) response1 = requests.post(endpoint + '/api/v0/add', files=files, auth=(projectId, projectSecret)) print(response1) # 用json解析返回结果,避免手动分割字符串的潜在问题 upload_result = response1.json() file_hash = upload_result['Hash'] print(f"上传成功,文件哈希: {file_hash}") # 验证文件内容(图片文件不要直接打印文本,保存为文件查看) params = {'arg': file_hash} response2 = requests.post(endpoint + '/api/v0/cat', params=params, auth=(projectId, projectSecret)) print(response2) # 将返回的二进制内容保存为本地文件验证 with open('verified_image.png', 'wb') as f: f.write(response2.content) print("验证文件已保存为verified_image.png") # 注意:除非确定要删除固定,否则不要执行以下代码 # response3 = requests.post(endpoint + '/api/v0/pin/rm', params=params, auth=(projectId, projectSecret)) # print(response3.json())
成功上传后查看文件的方法
- Infura后台查看:上传完成后等待1-2分钟(节点同步需要时间),进入你的IPFS项目控制台,在「Pins」页面就能看到已固定的文件哈希和相关信息。
- 通过Infura网关在浏览器查看:使用格式为
https://<你的项目ID>.infura-ipfs.io/ipfs/<文件哈希>的链接,替换成你的实际项目ID和上传得到的哈希值,直接在浏览器打开即可访问图片。 - 通过公共IPFS网关查看:使用公共网关链接
https://ipfs.io/ipfs/<文件哈希>,但需要确保文件已被Infura固定,否则可能需要等待网络节点同步后才能访问。
内容的提问来源于stack exchange,提问作者Alexander Wood
相关产品推荐
相关产品推荐

