Bird
Raised Fist0
FastAPIframework~20 mins

Multiple file uploads in FastAPI - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Multiple File Upload Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What happens when multiple files are uploaded using FastAPI's UploadFile list?

Consider this FastAPI endpoint that accepts multiple files:

from fastapi import FastAPI, UploadFile, File
from typing import List

app = FastAPI()

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

What will be the output if a client uploads three files named a.txt, b.txt, and c.txt?

FastAPI
from fastapi import FastAPI, UploadFile, File
from typing import List

app = FastAPI()

@app.post('/upload')
async def upload(files: List[UploadFile] = File(...)):
    return {'filenames': [file.filename for file in files]}
A{"filenames": ["a.txt", "b.txt", "c.txt"]}
B{"filenames": "a.txt,b.txt,c.txt"}
C{"filenames": ["file1", "file2", "file3"]}
D{"filenames": []}
Attempts:
2 left
💡 Hint

Think about how FastAPI collects multiple files into a list and how the filenames are accessed.

📝 Syntax
intermediate
2:00remaining
Which option correctly defines a FastAPI endpoint to accept multiple files?

Which of the following FastAPI endpoint definitions correctly accepts multiple files for upload?

A
@app.post('/upload')
async def upload(files: UploadFile = File(None)):
    return {'count': 0}
B
@app.post('/upload')
async def upload(files: UploadFile = File(...)):
    return {'count': 1}
C
@app.post('/upload')
async def upload(files: List[str] = File(...)):
    return {'count': len(files)}
D
@app.post('/upload')
async def upload(files: List[UploadFile] = File(...)):
    return {'count': len(files)}
Attempts:
2 left
💡 Hint

Remember that to accept multiple files, the parameter should be a list of UploadFile.

🔧 Debug
advanced
2:00remaining
Why does this FastAPI code raise a TypeError when uploading multiple files?

Given this FastAPI endpoint:

from fastapi import FastAPI, UploadFile, File

app = FastAPI()

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

Uploading multiple files causes a TypeError: 'UploadFile' object is not iterable. Why?

FastAPI
from fastapi import FastAPI, UploadFile, File

app = FastAPI()

@app.post('/upload')
async def upload(files: UploadFile = File(...)):
    return {'filenames': [file.filename for file in files]}
ABecause File(...) does not accept multiple files.
BBecause files is a single UploadFile, not a list, so it cannot be iterated.
CBecause UploadFile does not have a filename attribute.
DBecause the endpoint is missing async keyword.
Attempts:
2 left
💡 Hint

Check the type of the parameter files and how it is used in the list comprehension.

state_output
advanced
2:00remaining
What is the value of 'total_size' after uploading multiple files in this FastAPI endpoint?

Consider this FastAPI endpoint that calculates total size of uploaded files:

from fastapi import FastAPI, UploadFile, File
from typing import List

app = FastAPI()

@app.post('/upload')
async def upload(files: List[UploadFile] = File(...)):
    total_size = 0
    for file in files:
        content = await file.read()
        total_size += len(content)
    return {'total_size': total_size}

If a client uploads two files, one with 5 bytes and another with 10 bytes, what will be the returned total_size?

FastAPI
from fastapi import FastAPI, UploadFile, File
from typing import List

app = FastAPI()

@app.post('/upload')
async def upload(files: List[UploadFile] = File(...)):
    total_size = 0
    for file in files:
        content = await file.read()
        total_size += len(content)
    return {'total_size': total_size}
A{"total_size": 15}
B{"total_size": 2}
C{"total_size": 0}
D{"total_size": 5}
Attempts:
2 left
💡 Hint

Think about how the code reads each file's content and sums their lengths.

🧠 Conceptual
expert
3:00remaining
Which statement about FastAPI multiple file uploads is TRUE?

Choose the correct statement about handling multiple file uploads in FastAPI.

AFastAPI automatically saves all uploaded files to disk unless manually read.
BThe <code>UploadFile</code> objects are synchronous file objects and block the event loop when read.
CUsing <code>List[UploadFile]</code> with <code>File(...)</code> allows receiving multiple files without blocking the event loop.
DFastAPI requires a separate endpoint for each file to handle multiple uploads.
Attempts:
2 left
💡 Hint

Consider how FastAPI handles file uploads asynchronously and the role of UploadFile.

Practice

(1/5)
1. In FastAPI, which type hint should you use to accept multiple uploaded files in an endpoint?
easy
A. str with UploadFile
B. List[UploadFile] with File(...)
C. List[str] with File(...)
D. UploadFile without List

Solution

  1. Step 1: Understand FastAPI file upload types

    FastAPI uses UploadFile to handle file uploads efficiently.
  2. Step 2: Use List for multiple files

    To accept multiple files, you wrap UploadFile in a List and use File(...) to declare it as a file input.
  3. Final Answer:

    List[UploadFile] with File(...) -> Option B
  4. Quick Check:

    Multiple files = List[UploadFile] [OK]
Hint: Use List[UploadFile] with File(...) for multiple files [OK]
Common Mistakes:
  • Using UploadFile without List for multiple files
  • Using List[str] which expects strings, not files
  • Confusing str type with file uploads
2. Which of the following is the correct syntax to declare a FastAPI endpoint that accepts multiple files named 'files'?
easy
A. files: List[UploadFile] = File(...)
B. files: UploadFile = File(...)
C. files: List[str] = File(...)
D. files: str = UploadFile(...)

Solution

  1. Step 1: Check parameter type for multiple files

    Multiple files require List[UploadFile] type hint.
  2. Step 2: Use File(...) to mark as file input

    File(...) is needed to tell FastAPI this is a file upload field.
  3. Final Answer:

    files: List[UploadFile] = File(...) -> Option A
  4. Quick Check:

    Multiple files syntax = List[UploadFile] = File(...) [OK]
Hint: Use List[UploadFile] = File(...) for multiple files param [OK]
Common Mistakes:
  • Using UploadFile without List for multiple files
  • Using List[str] which is incorrect for files
  • Assigning UploadFile(...) instead of File(...)
3. Given this FastAPI endpoint code, what will be the output if two files named 'a.txt' and 'b.txt' are uploaded?
from fastapi import FastAPI, File, UploadFile
from typing import List

app = FastAPI()

@app.post('/upload')
async def upload(files: List[UploadFile] = File(...)):
    return {"filenames": [file.filename for file in files]}
medium
A. {"filenames": ["a.txt", "b.txt"]}
B. {"filenames": ["files", "files"]}
C. {"filenames": []}
D. Runtime error due to wrong type

Solution

  1. Step 1: Understand the endpoint logic

    The endpoint returns a dictionary with a list of filenames extracted from the uploaded files.
  2. Step 2: Check the uploaded files names

    Two files named 'a.txt' and 'b.txt' are uploaded, so their filenames will be returned in the list.
  3. Final Answer:

    {"filenames": ["a.txt", "b.txt"]} -> Option A
  4. Quick Check:

    Returned filenames list matches uploaded files [OK]
Hint: Returned filenames list matches uploaded files names [OK]
Common Mistakes:
  • Expecting file content instead of filenames
  • Confusing parameter name with file names
  • Assuming empty list if files uploaded
4. What is wrong with this FastAPI endpoint for multiple file uploads?
from fastapi import FastAPI, File, UploadFile
from typing import List

app = FastAPI()

@app.post('/upload')
async def upload(files: UploadFile = File(...)):
    return {"count": len(files)}
medium
A. File(...) should be replaced with UploadFile(...)
B. Missing async keyword in function definition
C. len(files) is invalid because files is a string
D. files should be List[UploadFile] to accept multiple files

Solution

  1. Step 1: Check parameter type for multiple files

    The parameter 'files' is typed as UploadFile, which accepts only one file.
  2. Step 2: Correct type for multiple files

    To accept multiple files, it must be List[UploadFile].
  3. Final Answer:

    files should be List[UploadFile] to accept multiple files -> Option D
  4. Quick Check:

    Multiple files need List[UploadFile] type [OK]
Hint: Use List[UploadFile] for multiple files, not UploadFile alone [OK]
Common Mistakes:
  • Using UploadFile instead of List[UploadFile] for multiple files
  • Confusing File(...) with UploadFile(...)
  • Forgetting async keyword (though present here)
5. You want to create a FastAPI endpoint that accepts multiple files and returns a JSON with each file's name and size in bytes. Which code snippet correctly implements this?
hard
A. async def upload(files: List[str] = File(...)): return [{"name": f, "size": 0} for f in files]
B. async def upload(files: UploadFile = File(...)): return [{"name": files.filename, "size": len(await files.read())}]
C. async def upload(files: List[UploadFile] = File(...)): results = [] for file in files: content = await file.read() results.append({"name": file.filename, "size": len(content)}) return results
D. async def upload(files: List[UploadFile] = File(...)): return [{"name": file.name, "size": file.size} for file in files]

Solution

  1. Step 1: Accept multiple files with correct type

    Use List[UploadFile] with File(...) to accept multiple files.
  2. Step 2: Read each file content to get size

    Use await file.read() to get bytes, then len() to get size.
  3. Step 3: Return list of dicts with name and size

    Build a list of dictionaries with filename and size for each file.
  4. Final Answer:

    Code snippet that correctly reads files and returns name and size -> Option C
  5. Quick Check:

    Read files async, return name and size list [OK]
Hint: Read files async, use len(content) for size, return list [OK]
Common Mistakes:
  • Using UploadFile without List for multiple files
  • Trying to get size without reading file content
  • Using wrong attribute names like file.name or file.size