Hello, I am trying to upload a directory to ipfs using python request and am having trouble figuring out how to format my files parameter. Currently I have this:
python```
files = {
“dir”: {
“test.txt”: “t”,
“subdir”: {
“subtest.txt”: “st”
}
}
}
response = requests.post(url, headers=headers, files=files)
This throws this error:
TypeError(“a bytes-like object is required, not ‘dict’”)
Is it possible to upload a directory and potentially subdirectories in one request??
If so what am I doing wrong?
2 Likes
Hi @confused_dev, welcome to our community!
Here’s a script I’ve built for uploading a folder to IPFS using python:
import requests
import os
import json
proj_id = '27h...'
proj_secret = '205...'
dir_name = '/Users/christian/Desktop/Infura/IPFS/folder_test/'
items = {}
for f in os.listdir(dir_name):
item = open(dir_name + f, 'rb')
items[f] = item
response = requests.post("https://ipfs.infura.io:5001/api/v0/add?pin=true&wrap-with-directory=true",
auth=(proj_id, proj_secret),files=items)
# for printing the CIDs in the console:
dec = json.JSONDecoder()
i = 0
while i < len(response.text):
data, s = dec.raw_decode(response.text[i:])
i += s + 1
print("%s: %s" % (data['Name'], data['Hash']))
The lastly printed CID in the console is the CID of the root folder.
Hope this helps!
1 Like