Code snippet for file upload
router = APIRouter()
@router.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile] = File(...)):
for file in files:
file_name = os.getcwd()+"/uploads/"+file.filename.replace(" ", "-")
with open(file_name,'wb+') as f:
f.write(file.file.read())
f.close()
return {"filenames": [file.filename for file in files]}
The code for uploading multiple files using the requests
module. All the files in the input directory are to be uploaded
doc_list = os.listdir(input_dir)
files = []
for doc in doc_list:
files.append(UploadFile(filename = doc, file = open(input_dir + doc)))
r = requests.post('http://127.0.0.1:8080/uploadfiles/', files=files)
The above code throws an error in the requests.post
line. Part of the error traceback is given below
F:\Anaconda\Anaconda3\envs\deep\lib\site-packages\requests\models.py in _encode_files(files, data)
139 v.encode('utf-8') if isinstance(v, str) else v))
140
--> 141 for (k, v) in files:
142 # support for explicit filename
143 ft = None
TypeError: 'UploadFile' object is not iterable
I have tried uploading the files using the below code
doc_list = os.listdir(input_dir)
files = []
for doc in doc_list[:50]:
files.append((input_dir + doc, open(input_dir + doc)))
#files.append({"file_name" : doc, "file" : open(input_dir + doc, "rb")})
r = requests.post('http://127.0.0.1:8080/uploadfiles/', files=files)
Sending a list of tuples gives 400 Bad Request
and sending a list of dictionary (commented line) gave 422 Unprocessable Entity