Python Upload Multiple Files with POST API - value error "Expected UploadFile, received: <class str>"

Viewed 389

I tried to upload multiple files using FastAPI. This is server's code.

@app.post('/img_multi_up')
def img_multi_up(
    set_name: str = Form(...),
    n_index: int = Form(...),
    files: List[UploadFile] = File(...),
    ):
    ...

`

The test on FastAPI docs web page is successful. (this is generated curl command.)

curl -X 'POST' \
  'http://.../img_multi_up' \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'set_name=test' \
  -F 'n_index=4' \
  -F 'files=@t0.jpg;type=image/jpeg' \
  -F 'files=@t1.jpg;type=image/jpeg' \
  -F 'files=@t2.jpg;type=image/jpeg' \
  -F 'files=@t3.jpg;type=image/jpeg'

And then I tried to upload 4 files with below code.

set_name = 'test'
n_index = 4
fis = ['t0.jpg', 't1.jpg', 't2.jpg', 't3.jpg']
files = {fi:open(fi,'rb') for fi in fis}
bd = {'set_name':set_name, 'n_index':n_index, 'files':files}
resp = requests.post(url,bd)

But The return is error message

'{"detail":[{"loc":["body","files",0],"msg":"Expected UploadFile, received: <class \'str\'>","type":"value_error"},{"loc":["body","files",1],"msg":"Expected UploadFile, received: <class \'str\'>","type":"value_error"},{"loc":["body","files",2],"msg":"Expected UploadFile, received: <class \'str\'>","type":"value_error"},{"loc":["body","files",3],"msg":"Expected UploadFile, received: <class \'str\'>","type":"value_error"}]}'

Also I tried change how to make 'files' in several ways,

files = [{fi:open(fi,'rb')} for fi in fis]
files = [(fi,open(fi,'rb'),'image/jpeg') for fi in fis]
files = [('files',(fi,open(fi,'rb'),'image/jpeg')) for fi in fis]

but all try is failed and the error message is same.

How should I make files correctly?

0 Answers
Related