在IPFS上上载文件时出错(TypeError:应为字符串或类似对象的字节)



我正在尝试在IPFS上上传一个文件并检索它。下面的教程使用了以下方法:

import requests
import json
files = {
"file" : ("Congrats! You have uploaded this on IPFS."),
}
response_hash = requests.post("https://ipfs.infura.io:5001/api/v0/add", files = files)
p = response_hash.json()
hashed = p["Hash"]
print(p)
print(hashed)
params = (
("arg", hashed),
)
response = requests.post("https://ipfs.infura.io:5001/api/v0/block/get", params = params)
print(response.text)

但是,我想上传多个数据,最好是json数组的形式。我试图修改它,但遇到了一个错误。

我的代码:

import requests
import json
example = {
"employees":[  
{"name":"Shyam", "email":"shyamjaiswal@gmail.com"},  
{"name":"Bob", "email":"bob32@gmail.com"},  
{"name":"Jai", "email":"jai87@gmail.com"}  
]}
response_hash = requests.post("https://ipfs.infura.io:5001/api/v0/add", files = example)
p = response_hash.json()
hashed = p["Hash"]
print(p)
print(hashed)
params = (
("arg", hashed),
)
response = requests.post("https://ipfs.infura.io:5001/api/v0/block/get", params = params)
print(response.text)

错误:

Traceback (most recent call last):
File "ipfs_v1.py", line 16, in <module>
response_hash = requests.post("https://ipfs.infura.io:5001/api/v0/add", files = example)
File "E:Anaconda3libsite-packagesrequestsapi.py", line 119, in post
return request('post', url, data=data, json=json, **kwargs)
File "E:Anaconda3libsite-packagesrequestsapi.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "E:Anaconda3libsite-packagesrequestssessions.py", line 516, in request
prep = self.prepare_request(req)
File "E:Anaconda3libsite-packagesrequestssessions.py", line 459, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "E:Anaconda3libsite-packagesrequestsmodels.py", line 317, in prepare
self.prepare_body(data, files, json)
File "E:Anaconda3libsite-packagesrequestsmodels.py", line 505, in prepare_body
(body, content_type) = self._encode_files(files, data)
File "E:Anaconda3libsite-packagesrequestsmodels.py", line 166, in _encode_files
rf.make_multipart(content_type=ft)
File "E:Anaconda3libsite-packagesurllib3fields.py", line 268, in make_multipart
((u"name", self._name), (u"filename", self._filename))
File "E:Anaconda3libsite-packagesurllib3fields.py", line 225, in _render_parts
parts.append(self._render_part(name, value))
File "E:Anaconda3libsite-packagesurllib3fields.py", line 205, in _render_part
return self.header_formatter(name, value)
File "E:Anaconda3libsite-packagesurllib3fields.py", line 116, in format_header_param_html5
value = _replace_multiple(value, _HTML5_REPLACEMENTS)
File "E:Anaconda3libsite-packagesurllib3fields.py", line 89, in _replace_multiple
result = pattern.sub(replacer, value)
TypeError: expected string or bytes-like object

我做错了什么?如何将json数组上传到IPFS?

将员工详细信息转换为字符串

import requests
import json
files = {
"employees" : ( """{"name":"Shyam", "email":"shyamjaiswal@gmail.com"},  
{"name":"Bob", "email":"bob32@gmail.com"},  
{"name":"Jai", "email":"jai87@gmail.com"}  """),
}
response_hash = requests.post("https://ipfs.infura.io:5001/api/v0/add", files = files)
p = response_hash.json()
hashed = p["Hash"]
print(p)
print(hashed)
params = (
("arg", hashed),
)
response = requests.post("https://ipfs.infura.io:5001/api/v0/block/get", params = params)
print(response.text)

输出:

{'Name': 'employees', 'Hash': 'QmeGTapzFr36Bag6c1w4ZxiuJVM8wxDGMD7GFFmc7onV8c', 'Size': '161'}
QmeGTapzFr36Bag6c1w4ZxiuJVM8wxDGMD7GFFmc7onV8c
╗ {"name":"Shyam", "email":"shyamjaiswal@gmail.com"},
{"name":"Bob", "email":"bob32@gmail.com"},
{"name":"Jai", "email":"jai87@gmail.com"}   

最新更新