Start here. This is the direct spoken answer to practice first.
Why this question matters
File uploads cross almost every boundary: browser, network, API limits, storage, validation, security, and user feedback. It is a rich practical feature question.
I would validate file size and type in the UI for fast feedback, then validate again on the server. The backend stores metadata in the database and file bytes in durable storage, not as permanent web-server disk files. The UI shows selected file, progress where available, cancel or retry behavior, and clear errors. After upload, the API returns a file id and status rather than exposing storage internals.