Nova Sangeeth
Nova Sangeeth

Reputation: 113

How to set the file multiple file upload field as an Optional field in FastAPI

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.

Upvotes: 11

Views: 8904

Answers (2)

Jimmy Obonyo Abor
Jimmy Obonyo Abor

Reputation: 7885

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]}

Upvotes: 3

Yagiz Degirmenci
Yagiz Degirmenci

Reputation: 20746

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]}

Upvotes: 14

Related Questions