9
from typing import List

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse

app = FastAPI()


@app.post("/files/")
async def create_files(files: List[bytes] = File(...)):
    return {"file_sizes": [len(file) for file in files]}


@app.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile] = File(...)):
    return {"filenames": [file.filename for file in files]}

I am required to get the multiple file upload field as an Optional one The documentation has the above mentioned code but it has no details on how to make the "FileUpload" field as an optional field.

Nova Sangeeth
  • 93
  • 3
  • 6
  • 1
    You can find more (recent) details about optional parameters in [this answer](https://stackoverflow.com/a/73261442/17865804). – Chris Jan 07 '23 at 17:30
  • Have a look at [this answer](https://stackoverflow.com/a/70657621/17865804) and [this answer](https://stackoverflow.com/a/70667530/17865804) on how to upload multiple files in FastAPI. – Chris Aug 30 '23 at 04:30

2 Answers2

13

You can use None instead of ... (Ellipsis) to make a field Optional

This is an Optional field.

from typing import Optional

files: Optional[List[bytes]] = File(None)

This a required field.

files: List[bytes] = File(...)

Working example for your case.

from typing import List, Optional

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import HTMLResponse

app = FastAPI()


@app.post("/files/")
async def create_files(files: Optional[List[bytes]] = File(None)):
    return {"file_sizes": [len(file) for file in files]}


@app.post("/uploadfiles/")
async def create_upload_files(files: Optional[List[UploadFile]] = File(None)):
    return {"filenames": [file.filename for file in files]}
Yagiz Degirmenci
  • 16,595
  • 7
  • 65
  • 85
0

this worked for me

@app.post("/uploadfiles/")
def create_upload_files(
  files: List[Union[UploadFile, None]] = File(None)
):
    return {"filenames": [file.filename for file in files]}
Jimmy Obonyo Abor
  • 7,335
  • 10
  • 43
  • 71