在 IPFS 上上传文件时出错TypeError: expected string or bytes-like object

问题描述

我正在尝试在 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",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:\Anaconda3\lib\site-packages\requests\api.py",line 119,in post
    return request('post',url,data=data,json=json,**kwargs)
  File "E:\Anaconda3\lib\site-packages\requests\api.py",line 61,in request
    return session.request(method=method,url=url,**kwargs)
  File "E:\Anaconda3\lib\site-packages\requests\sessions.py",line 516,in request
    prep = self.prepare_request(req)
  File "E:\Anaconda3\lib\site-packages\requests\sessions.py",line 459,in prepare_request
    hooks=merge_hooks(request.hooks,self.hooks),File "E:\Anaconda3\lib\site-packages\requests\models.py",line 317,in prepare
    self.prepare_body(data,files,json)
  File "E:\Anaconda3\lib\site-packages\requests\models.py",line 505,in prepare_body
    (body,content_type) = self._encode_files(files,data)
  File "E:\Anaconda3\lib\site-packages\requests\models.py",line 166,in _encode_files
    rf.make_multipart(content_type=ft)
  File "E:\Anaconda3\lib\site-packages\urllib3\fields.py",line 268,in make_multipart
    ((u"name",self._name),(u"filename",self._filename))
  File "E:\Anaconda3\lib\site-packages\urllib3\fields.py",line 225,in _render_parts
    parts.append(self._render_part(name,value))
  File "E:\Anaconda3\lib\site-packages\urllib3\fields.py",line 205,in _render_part
    return self.header_formatter(name,value)
  File "E:\Anaconda3\lib\site-packages\urllib3\fields.py",line 116,in format_header_param_html5
    value = _replace_multiple(value,_HTML5_REPLACEMENTS)
  File "E:\Anaconda3\lib\site-packages\urllib3\fields.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":"jai87@gmail.com"}   

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...