You want to understand what happens when a file is uploaded from a frontend (like React, HTML form, etc.) to your FastAPI backend, and how it is saved to your computer/server.
📤
👉 On the frontend, the user selects a file (e.g., PDF, Image, DOC) and clicks “Upload.”
💡 Example:
<input type="file" name="myfile" />
The file is sent to your backend through an API endpoint using the HTTP method POST.
📥
In your FastAPI code, you define an endpoint to accept file uploads:
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}
🧠
Here’s what’s happening:
UploadFile → a special FastAPI object that represents your uploaded file.
file.filename → gives the name of the uploaded file.
FastAPI temporarily stores this file in memory (for small files) or in a temporary location.
📍
Now, decide a permanent folder where you want to keep all uploaded files.
Example:
UPLOAD_FOLDER = "uploaded_files/"
(You can create that folder in your project directory.)
wb)🧠
This step is important!
When you upload a file, you need to read the content from the uploaded file and write it to a file on your disk.
with open(f"{UPLOAD_FOLDER}{file.filename}", "wb") as buffer:
buffer.write(await file.read())
🧩 What happens here:
open(..., "wb") → opens a new file to write in binary mode (since it can be images, videos, etc.)
await file.read() → reads all the bytes from the uploaded file.
buffer.write(...) → saves those bytes into the new file in your chosen folder.
🎉
Now your file exists in your project directory:
uploaded_files/
└── my_uploaded_document.pdf
You can later access, move, or process it however you want!
from fastapi import FastAPI, File, UploadFile
import os
app = FastAPI()
UPLOAD_DIR = "uploaded_files"
# 🧱 Create folder if not exists
if not os.path.exists(UPLOAD_DIR):
os.makedirs(UPLOAD_DIR)
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
# 📌 1️⃣ Get file name
filename = file.filename
# 📌 2️⃣ Create full path
file_path = os.path.join(UPLOAD_DIR, filename)
# 📌 3️⃣ Read + Write file in binary mode
with open(file_path, "wb") as f:
f.write(await file.read())
# 📌 4️⃣ Return success message
return {"status": "✅ File uploaded successfully!", "path": file_path}
🎨 FRONTEND
↓
📤 User uploads →
↓
📬 FASTAPI receives UploadFile
↓
🧠 Reads file (in bytes)
↓
💾 Opens destination in write-binary mode
↓
📂 Writes + Saves file in chosen folder
↓
✅ Success message sent back