我正在尝试使用 pinata 的 API 来固定整个目录,正如其API 文档中所指定的那样。
我也找到了一些 python 实现,但这似乎对我来说仍然不起作用。
基本上我从目录中获取所有文件并尝试将它们包含在发布请求中。
all_files: tp.List[str] = get_all_files(filepath)
files = {"file": [(file, open(file, "rb")) for file in all_files]}
response: requests.Response = requests.post(url=ipfs_url, files=files, headers=headers)
Run Code Online (Sandbox Code Playgroud)
我得到的错误如下:
ValueError: too many values to unpack (expected 4)
Run Code Online (Sandbox Code Playgroud)
我还尝试了一些硬编码值,但仍然没有运气:
all_files = ['images/0.png', 'images/1.png', 'images/2.png']
files = {"file": [(file, open(file, "rb")) for file in all_files]}
response: requests.Response = requests.post(url=ipfs_url, files=files, headers=headers)
Run Code Online (Sandbox Code Playgroud)
然而在这种情况下我得到了一个不同的错误:
TypeError: expected string or bytes-like object
Run Code Online (Sandbox Code Playgroud)
另外,作为另一次尝试,我尝试尝试这样的东西:
files = (
("file", ("0.png", open('images/0.png', "rb"))),
("file", ("1.png", open('images/1.png', "rb")))
)
response: requests.Response = requests.post(url=ipfs_url, files=files, headers=headers)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Pinata 无法识别我想要的内容并返回以下错误:
{'error': 'More than one file and/or directory was provided for pinning.'}
Run Code Online (Sandbox Code Playgroud)
有人可以给我一些关于我做错了什么的提示吗?谢谢!
编辑:添加一个完整的示例来使用:
import os
import requests
import typing as tp
def get_all_files(directory: str) -> tp.List[str]:
"""get a list of absolute paths to every file located in the directory"""
paths: tp.List[str] = []
for root, dirs, files_ in os.walk(os.path.abspath(directory)):
for file in files_:
paths.append(os.path.join(root, file))
return paths
print("hello")
# Example 1
all_files: tp.List[str] = get_all_files("images")
files = {"file": [(file, open(file, "rb")) for file in all_files]}
# Example 2
#all_files = ['images/0.png', 'images/1.png', 'images/2.png']
#files = {"file": [(file, open(file, "rb")) for file in all_files]}
# Example 3
#files = (
# ("file", ("0.png", open('images/0.png', "rb"))),
# ("file", ("1.png", open('images/1.png', "rb")))
#)
print ("Files used: \n")
print (files)
headers = {
'pinata_api_key': "",
'pinata_secret_api_key': ""
}
ipfs_url = "https://api.pinata.cloud/pinning/pinFileToIPFS"
response: requests.Response = requests.post(url=ipfs_url, files=files, headers=headers)
print(response.json())
Run Code Online (Sandbox Code Playgroud)
好的,我成功上传了整个目录并指定了如下文件:
files = [
('file', ('images/0.png', open('images/0.png', "rb"))),
('file', ('images/1.png', open('images/1.png', "rb"))),
]
Run Code Online (Sandbox Code Playgroud)
因此,总的来说,为了收集所有文件并上传它们,我可以使用以下代码:
all_files: tp.List[str] = get_all_files(directory)
files = [('file', (file, open(file, "rb"))) for file in all_files]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3099 次 |
最近记录: |