File responses let your web app send files like images or documents to users. This helps users download or view files directly from your app.
File responses in FastAPI
from fastapi import FastAPI from fastapi.responses import FileResponse app = FastAPI() @app.get("/file") async def get_file(): return FileResponse("path/to/your/file.txt")
Use FileResponse to send files from your server to the client.
The file path must be accessible by your app and include the full or relative path.
report.pdf located in the /files folder.return FileResponse("/files/report.pdf")
return FileResponse("images/photo.jpg", media_type="image/jpeg")
UserManual.txt.return FileResponse("docs/manual.txt", filename="UserManual.txt")
This example creates a FastAPI app with one route /download-report. When visited, it sends the report.pdf file from the files folder. The browser will download it as AnnualReport.pdf.
from fastapi import FastAPI from fastapi.responses import FileResponse app = FastAPI() @app.get("/download-report") async def download_report(): # Sends the report.pdf file to the user return FileResponse("./files/report.pdf", media_type="application/pdf", filename="AnnualReport.pdf")
Make sure the file path is correct and the file exists to avoid errors.
Use media_type to help browsers handle the file correctly.
Setting filename controls the name users see when downloading.
File responses let your app send files to users easily.
Use FileResponse with the file path to send files.
Set media type and filename for better user experience.
Practice
FileResponse in FastAPI?Solution
Step 1: Understand the role of FileResponse
FileResponseis designed to send files from the server to the client in FastAPI.Step 2: Differentiate from other file operations
Uploading or deleting files are handled differently;FileResponsespecifically sends files.Final Answer:
To send files from the server to the client -> Option AQuick Check:
FileResponse sends files [OK]
- Confusing FileResponse with file upload handling
- Thinking FileResponse reads file content as text
- Assuming FileResponse deletes files
FileResponse in FastAPI?Solution
Step 1: Recall correct import syntax
FastAPI'sFileResponseis imported fromfastapi.responsesusing Python's standard import syntax.Step 2: Check each option's correctness
from fastapi.responses import FileResponse uses correct syntax and casing. from fastapi import FileResponse misses the submodule. import FileResponse from fastapi.responses uses wrong syntax. from fastapi.responses import file_response uses wrong casing.Final Answer:
from fastapi.responses import FileResponse -> Option DQuick Check:
Correct import is from fastapi.responses [OK]
- Using wrong import syntax like 'import X from Y'
- Importing directly from fastapi without .responses
- Wrong casing like file_response instead of FileResponse
from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()
@app.get('/download')
async def download_file():
return FileResponse('example.pdf', media_type='application/pdf', filename='report.pdf')Solution
Step 1: Analyze FileResponse parameters
The first argument is the file path to send ('example.pdf'). The media_type sets the content type to PDF. The filename sets the suggested download name.Step 2: Understand the endpoint behavior
When called, the endpoint sends the file 'example.pdf' with content type 'application/pdf' and suggests the name 'report.pdf' for download.Final Answer:
Sends the file 'example.pdf' with download name 'report.pdf' and PDF media type -> Option BQuick Check:
FileResponse sends file with given path and filename [OK]
- Thinking filename argument changes the file read
- Expecting JSON response instead of file
- Assuming filename cannot be set
from fastapi import FastAPI
from fastapi.responses import FileResponse
app = FastAPI()
@app.get('/file')
async def get_file():
return FileResponse(filepath='data.txt', media_type='text/plain')Solution
Step 1: Check FileResponse constructor parameters
FileResponse expects the file path as the first positional argument, not as a 'filepath' keyword argument.Step 2: Identify the error cause
Passing 'filepath=' causes a TypeError because FileResponse does not have a 'filepath' parameter.Final Answer:
FileResponse does not accept a 'filepath' keyword argument -> Option AQuick Check:
FileResponse needs file path as first argument, no 'filepath=' [OK]
- Using 'filepath=' keyword instead of positional argument
- Thinking filename is mandatory
- Believing async is not allowed for endpoints
Solution
Step 1: Check file existence properly
Usingos.path.exists('file.txt')correctly checks if the file exists before sending.Step 2: Return appropriate response on missing file
RaisingHTTPExceptionwith 404 status is the proper way to signal file not found in FastAPI.Final Answer:
Code snippet B correctly checks file existence and raises 404 if missing -> Option CQuick Check:
Check file with os.path.exists + raise HTTPException [OK]
- Not checking file existence before sending
- Returning JSON error instead of raising HTTPException
- Using try-except without proper exception handling
Ready to prove it?
Pass the test and this pattern moves unknown
