ipfshttpclient安装
# 下载git上资源
git clone https://github.com/ipfs/py-ipfs-http-client.git
cd py-ipfs-http-client
# 将ipfs-api-client链接到你的Python路径
vim /etc/profile source /etc/profile
FLIT_ROOT_INSTALL=1 # 添加环境变量
python3.6 -m pip install flit # 安装filt
flit install --pth-file # 添加到Python路径路径中
ipfs python接口
import json
import ipfshttpclient
class IPFSApiClient:
def __init__(self):
self.api = ipfshttpclient.connect('/ip4/192.168.107.216/tcp/5001/http') # /ip4/192.168.107.220/tcp/9095
# self.api = ipfshttpclient.connect('/ip4/192.168.107.220/tcp/9095/http')
def file_add(self, file_path): # 上传文件
response = self.api.add(file_path)
print(response)
return response
def file_addr(self, file_path): # 上传文件夹
response = self.api.add(file_path, recursive=True, wrap_with_directory=True, pin=True)
print(response)
return response
def file_mkdir(self, file_path): # 创建文件夹
try:
self.api.files.mkdir(file_path) # 移动文件
except:
print("文件夹已经创建")
def file_cp(self, file_path, catalogue): # 移动文件
try:
self.api.files.cp(file_path, catalogue)
except:
print("文件一已经存在")
def file_stat(self, file_path): # 查看文件信息
response = self.api.files.stat(file_path) # 获取文件哈希
print(response)
return response
def connection_url(self, url, fime_name=''):
if fime_name:
print("http://192.168.107.216:8080/ipfs/{}/{}".format(url, fime_name))
else:
print("http://192.168.107.216:8080/ipfs/{}".format(url))
if __name__ == '__main__':
client = IPFSApiClient()
catalogue = "/740"
fime_name = 'a.jpg'
hash = client.file_add("./740/730_ss_ffe584c163a2b16e9c1b733b1c8e2ba669fb1204.jpg")['Hash']
client.file_mkdir(catalogue)
print("/ipfs/{}".format(hash), '{}/a,jpg'.format(catalogue))
client.file_cp("/ipfs/{}".format(hash), '{}/{}'.format(catalogue, fime_name))
file_hash = client.file_stat(catalogue)['Hash']
client.connection_url(hash)
client.connection_url(file_hash, fime_name)
import io
import json
import ipfshttpclient
class ipfs_test(object):
def __init__(self):
# 连接IPFS,需要先启动节点服务器daemon
self.api = ipfshttpclient.connect('/ip4/192.168.107.216/tcp/5001/http')
def ipfs_id(self):
ipf = self.api.id() # 查看节点ID
ipf = self.api.add('jp.jpg') # 上传文件
ipf = self.api.files_mkdir('/fake_dir') # 上传目录
ipf = self.api.cat('QmecSv31G89AgE1KXrWuwHMvq1xUjLRYaKpww247j1BXij') # 查看文件内容
ipf = self.api.pin.ls(type='all') # 查看本地已存储的所有文件
ipf = self.api.files_cp("/test", "/bla") # 复制
ipf = self.api.files_ls("/") # 遍历文件
ipf = self.api.files_rm("/fake_dir") # 删除一个文件
ipf = self.api.files_read("/fake_dir") # 读取一个文件的内容
ipf = self.api.files_mv("/test/file", "/bla/file") # 移动一个文件
ipf = self.api.files_write("/test/file", io.BytesIO(b"hi"), create=True) # 对一个文件进行写操作
print(json.dumps(ipf, ensure_ascii=False))
if __name__ == "__main__":
ipf = ipfs_test()
ipf.ipfs_id()
1.基本用法 (需要已经有一个运行的 IPFS 服务实例)
import ipfshttpclient
api = ipfshttpclient.connect('/ip4/192.168.107.216/tcp/5001/http')
res = api.add('test.txt')
res
{'Hash': 'QmWxS5aNTFEc9XbMX1ASvLET1zrqEaTssqt33rVZQCQb22', 'Name': 'test.txt'}
api.cat(res['Hash'])
'fdsafkljdskafjaksdjf\n'
2.管理功能
api.id()
{'Addresses': ['/ip4/127.0.0.1/tcp/4001/ipfs/QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS',
'/ip6/::1/tcp/4001/ipfs/QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS'],
'AgentVersion': 'go-ipfs/0.4.10',
'ID': 'QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS',
'ProtocolVersion': 'ipfs/0.1.0',
'PublicKey': 'CAASpgIwgg ... 3FcjAgMBAAE='}
3.传入API参数
api.pin_ls(type='all')
{'Keys': {'QmNMELyizsfFdNZW3yKTi1SE2pErifwDTXx6vvQBfwcJbU': {'Count': 1,
'Type': 'indirect'},
'QmNQ1h6o1xJARvYzwmySPsuv9L5XfzS4WTvJSTAWwYRSd8': {'Count': 1,
'Type': 'indirect'},
…
4.添加目录,指定文件名类型匹配
api.add('photos', match='*.jpg')
[{'Hash': 'QmcqBstfu5AWpXUqbucwimmWdJbu89qqYmE3WXVktvaXhX',
'Name': 'photos/photo1.jpg'},
{'Hash': 'QmSbmgg7kYwkSNzGLvWELnw1KthvTAMszN5TNg3XQ799Fu',
'Name': 'photos/photo2.jpg'},
{'Hash': 'Qma6K85PJ8dN3qWjxgsDNaMjWjTNy8ygUWXH2kfoq9bVxH',
'Name': 'photos/photo3.jpg'}]
5.递归添加目录
api.add('fake_dir', recursive=True)
[{'Hash': 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX',
'Name': 'fake_dir/fsdfgh'},
{'Hash': 'QmNuvmuFeeWWpxjCQwLkHshr8iqhGLWXFzSGzafBeawTTZ',
'Name': 'fake_dir/test2/llllg'},
{'Hash': 'QmX1dd5DtkgoiYRKaPQPTCtXArUu4jEZ62rJBUcd5WhxAZ',
'Name': 'fake_dir/test2'},
{'Hash': 'Qmenzb5J4fR9c69BbpbBhPTSp2Snjthu2hKPWGPPJUHb9M',
'Name': 'fake_dir'}]
6.辅助函数,添加字符串和JSON等资源
lst = [1, 77, 'lol']
client.add_json(lst)
'QmQ4R5cCUYBWiJpNL7mFe4LDrwD6qBr5Re17BoRAY9VNpd'
client.get_json(_)
[1, 77, 'lol']
7.综合
import ipfshttpclient
# 连接IPFS,需要先启动节点服务器daemon
api = ipfshttpclient.connect('/ip4/192.168.107.216/tcp/5001/http')
# 查看节点ID
api.id()
# 上传文件
res = api.add('test.txt')
# 上传目录
res = api.add('pub_dir', recursive=True)
# 查看文件内容
res = api.cat('QmWxS5aNTFEc9XbMX1ASvLET1zrqEaTssqt33rVZQCQb23')
# 下载文件
res = api.get('QmWxS5aNTFEc9XbMX1ASvLET1zrqEaTssqt33rVZQCQb23')