Files
moto-adv-website/MEDIA_MANAGEMENT.md
ske087 540eb17e89 Implement organized media folder structure for community posts
- Add media_folder field to Post model for organized file storage
- Create MediaConfig class for centralized media management settings
- Update community routes to use post-specific media folders
- Add thumbnail generation for uploaded images
- Implement structured folder layout: app/static/media/posts/{post_folder}/
- Add utility functions for image and GPX file handling
- Create media management script for migration and maintenance
- Add proper file validation and MIME type checking
- Include routes for serving images, thumbnails, and GPX files
- Maintain backward compatibility with existing uploads
- Add comprehensive documentation and migration tools

Each post now gets its own media folder with subfolders for:
- images/ (with thumbnails/ subfolder)
- gpx/

Post content remains in database for optimal query performance while
media files are organized in dedicated folders for better management.
2025-07-23 18:03:03 +03:00

3.8 KiB

Media Management for Motorcycle Adventure Community

Overview

The application now uses an organized media folder structure where each post has its own dedicated folder for storing images, GPX files, and other media content.

Folder Structure

app/static/media/posts/
├── post_abc12345_20250723/
│   ├── images/
│   │   ├── cover_image.jpg
│   │   ├── route_photo_1.jpg
│   │   └── route_photo_2.jpg
│   └── gpx/
│       └── route_track.gpx
├── post_def67890_20250724/
│   ├── images/
│   └── gpx/
└── ...

Post Content Storage Strategy

  • Post metadata: title, subtitle, content, difficulty, publication status
  • Relationships: author, comments, likes
  • Media references: filenames and metadata stored in database
  • Benefits:
    • Fast queries and searching
    • Proper relationships and constraints
    • ACID compliance
    • Easy backups with database tools
    • Scalability for large amounts of posts

File Storage

  • Media files: images, GPX files stored in organized folders
  • Benefits:
    • Direct web server access (faster serving)
    • Easy file management
    • Reduced database size
    • CDN compatibility

Database Schema

Posts Table

  • media_folder: String field containing the unique folder name for this post's media
  • Content stored as TEXT in the database for optimal performance

PostImage Table

  • filename: Stored filename (unique)
  • original_name: User's original filename
  • is_cover: Boolean indicating if this is the cover image
  • post_id: Foreign key to posts table

GPXFile Table

  • filename: Stored filename (unique)
  • original_name: User's original filename
  • post_id: Foreign key to posts table

Media Folder Naming Convention

Format: post_{8-char-uuid}_{YYYYMMDD}

  • Example: post_abc12345_20250723
  • Ensures uniqueness and chronological organization

File Upload Process

  1. Post Creation:

    • Generate unique media folder name
    • Create post record in database
    • Create folder structure in app/static/media/posts/
  2. File Upload:

    • Save files to post-specific subfolders
    • Store metadata in database
    • Generate thumbnails (for images)
  3. File Access:

    • URLs: /static/media/posts/{media_folder}/images/{filename}
    • Direct web server serving for performance

Migration and Management

Manual Migration Script

python manage_media.py --all

Available Commands

  • --create-folders: Create media folders for existing posts
  • --migrate-files: Move files from old structure to new structure
  • --clean-orphaned: Remove unused media folders
  • --stats: Show storage statistics

Security Considerations

  1. File Type Validation: Only allowed image and GPX file types
  2. File Size Limits: Configurable maximum file sizes
  3. Filename Sanitization: Secure filename generation with UUIDs
  4. Access Control: Media files served through static file handler

Performance Optimizations

  1. Image Compression: Automatic JPEG compression with 85% quality
  2. Image Resizing: Automatic thumbnail generation and size limits
  3. Direct File Serving: Static files served directly by web server
  4. CDN Ready: File structure compatible with CDN distribution

Backup Strategy

  1. Database: Regular database backups include all post content and metadata
  2. Media Files: File system backups of app/static/media/posts/ directory
  3. Synchronization: Media folder names in database ensure consistency

Development Notes

  • Post content remains in database for optimal query performance
  • Media files organized by post for easy management
  • Backward compatibility maintained for existing installations
  • Migration tools provided for seamless upgrades