2.8 KiB
2.8 KiB
Detailed Software Requirements Specification
1. Project Overview
A web-based file management system using FastAPI that allows users to upload and download files. The system categorizes files by type and maintains metadata in a JSON file.
2. Functional Requirements
2.1 File Upload
- Endpoint:
POST /api/files/upload - Description: Accepts a file and its associated metadata.
- Payload: Multipart form-data containing:
file: The actual file to upload.description: (Optional) A brief description of the file.uploader: (Optional) Name of the person uploading.
- Storage Logic:
- Images (e.g., JPG, PNG, GIF) must be saved in
assets/images/. - Videos (e.g., MP4, AVI, MKV) must be saved in
assets/videos/. - Optional: Handle other file types or return an error if unsupported.
- Images (e.g., JPG, PNG, GIF) must be saved in
- Metadata Management:
- Upon successful upload, record the following in
metadata.json:filename: Original or sanitized filename.type: MIME type or category (image/video).upload_date: ISO 8601 formatted timestamp.file_path: Relative path to the stored file.description: Provided description.uploader: Provided uploader name.
- Upon successful upload, record the following in
2.2 File List Retrieval
- Endpoint:
GET /api/files - Description: Returns a list of all uploaded files and their metadata.
- Response: JSON array containing metadata for each file stored in
metadata.json.
2.3 File Download
- Endpoint:
GET /api/files/download - Parameters:
filename(query parameter). - Description: Streams the requested file to the client.
- Error Handling: Return 404 if the file is not found in metadata or on disk.
2.3 Static Web Serving
- Endpoint:
/web - Description: Serve static HTML, CSS, and JavaScript files from a
staticdirectory to provide a user interface.
3. Technical Requirements
3.1 Backend
- Framework: FastAPI
- Language: Python 3.9+
- Dependencies:
python-multipart(for file uploads),uvicorn(ASGI server).
3.2 Data Storage
- Filesystem: Local storage under
assets/directory. - Metadata: A single
metadata.jsonfile acting as a lightweight database.
3.3 Directory Structure
.
├── main.py # FastAPI application entry point
├── metadata.json # File metadata storage
├── assets/
│ ├── images/ # Uploaded image files
│ └── videos/ # Uploaded video files
├── static/ # Web frontend files (HTML/CSS/JS)
└── REQUIREMENTS.md # This document
4. Non-Functional Requirements
- Security: Sanitize filenames to prevent path traversal attacks.
- Performance: Efficiently handle file streaming for downloads.
- Maintainability: Clear separation between API logic and file management.