PHPackages                             monkeyscloud/monkeyslegion-files - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. monkeyscloud/monkeyslegion-files

ActiveLibrary[File &amp; Storage](/categories/file-storage)

monkeyscloud/monkeyslegion-files
================================

Production-ready file storage and upload management for the MonkeysLegion framework ecosystem

2.0.1(2mo ago)11.1k↑250%2MITPHPPHP ^8.4

Since Jul 26Pushed 2mo agoCompare

[ Source](https://github.com/MonkeysCloud/MonkeysLegion-Files)[ Packagist](https://packagist.org/packages/monkeyscloud/monkeyslegion-files)[ RSS](/packages/monkeyscloud-monkeyslegion-files/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (20)Versions (6)Used By (2)

MonkeysLegion Files
===================

[](#monkeyslegion-files)

Production-ready file storage and upload management for the **MonkeysLegion** framework ecosystem. Built for high-traffic sites handling millions of files.

[![PHP Version](https://camo.githubusercontent.com/504ead6a583c68d8d62d7bfceed24e569ca613d7a36bed380281b3455b5c7b31/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e342d626c7565)](https://php.net)[![License](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)](LICENSE)

Features
--------

[](#features)

- 🚀 **Chunked Uploads** - Resume-capable multipart uploads for large files
- ☁️ **Multi-Storage** - Local, S3, MinIO, DigitalOcean Spaces, Backblaze B2, Google Cloud Storage, Firebase
- 🖼️ **Image Processing** - Thumbnails, optimization, watermarks, format conversion
- 🔒 **Security** - Signed URLs, rate limiting, virus scanning
- 📊 **Database Tracking** - Full file metadata with soft deletes
- 🧹 **Garbage Collection** - Automatic cleanup of orphaned files
- 🌐 **CDN Integration** - CloudFront-style signed URLs
- ⚡ **Async Jobs** - Queue-based processing for heavy operations

Installation
------------

[](#installation)

```
composer require monkeyscloud/monkeyslegion-files
```

This package requires the MonkeysLegion ecosystem:

- **MonkeysLegion-Mlc** - Configuration management (auto-included)
- **MonkeysLegion-Cache** - Caching and rate limiting (auto-included)
- **MonkeysLegion-Database** - Database tracking (auto-included)

### Optional Dependencies

[](#optional-dependencies)

```
# For S3-compatible storage (AWS, MinIO, DigitalOcean, Backblaze)
composer require aws/aws-sdk-php

# For Google Cloud Storage / Firebase Storage
composer require google/cloud-storage

# For image processing
# Install ext-gd or ext-imagick via your system package manager
```

Quick Start
-----------

[](#quick-start)

```
use MonkeysLegion\Files\FilesServiceProvider;
use MonkeysLegion\Cache\CacheManager;
use MonkeysLegion\Database\Factory\ConnectionFactory;

// Setup with MonkeysLegion ecosystem
$cacheManager = new CacheManager(require 'config/cache.php');
$dbConnection = ConnectionFactory::create(require 'config/database.php');

$provider = new FilesServiceProvider(
    container: $container,
    cacheManager: $cacheManager,
    dbConnection: $dbConnection,
);
$provider->register();

// Now use the file manager
$files = $container->get(FilesManager::class);

// Store a file
$path = ml_files_put($_FILES['upload']['tmp_name']);

// Store content
$path = ml_files_put_string("Hello World", "text/plain");

// Get file contents
$contents = ml_files_get($path);

// Generate signed URL (valid for 10 minutes)
$url = ml_files_sign_url("/files/{$path}", 600);

// Delete a file
ml_files_delete($path);
```

MonkeysLegion Ecosystem Integration
-----------------------------------

[](#monkeyslegion-ecosystem-integration)

This package integrates seamlessly with the MonkeysLegion framework ecosystem:

### Configuration (MonkeysLegion-Mlc)

[](#configuration-monkeyslegion-mlc)

```
use MonkeysLegion\Mlc\Loader;
use MonkeysLegion\Mlc\Parser;

$loader = new Loader(new Parser(), 'config');
$config = $loader->loadOne('files');

// Type-safe access
$maxSize = $config->getInt('files.upload.max_size', 20971520);
$allowedMimes = $config->getArray('files.upload.allowed_mimes', []);
```

### Caching (MonkeysLegion-Cache)

[](#caching-monkeyslegion-cache)

```
use MonkeysLegion\Cache\CacheManager;

$cacheManager = new CacheManager([
    'default' => 'redis',
    'stores' => [
        'redis' => [
            'driver' => 'redis',
            'host' => '127.0.0.1',
            'port' => 6379,
            'prefix' => 'ml_files_',
        ],
    ],
]);

// Rate limiting uses the cache
$rateLimiter = new UploadRateLimiter($cacheManager);
```

### Database (MonkeysLegion-Database)

[](#database-monkeyslegion-database)

```
use MonkeysLegion\Database\Factory\ConnectionFactory;

$connection = ConnectionFactory::create([
    'default' => 'mysql',
    'connections' => [
        'mysql' => [
            'dsn' => 'mysql:host=localhost;dbname=myapp',
            'username' => 'root',
            'password' => 'secret',
        ],
    ],
]);

// File repository uses the connection
$repository = new FileRepository($connection);
```

Configuration
-------------

[](#configuration)

The package supports both PHP array and MLC configuration formats.

### MLC Format (Recommended)

[](#mlc-format-recommended)

Create `config/files.mlc`:

```
# MonkeysLegion Files Configuration

files.default = env("FILES_DISK", "local")

files.disks.local {
    driver = "local"
    root = env("FILES_LOCAL_ROOT", "storage/files")
    visibility = "private"
}

files.disks.s3 {
    driver = "s3"
    key = env("AWS_ACCESS_KEY_ID", "")
    secret = env("AWS_SECRET_ACCESS_KEY", "")
    region = env("AWS_DEFAULT_REGION", "us-east-1")
    bucket = env("AWS_BUCKET", "")
    visibility = "private"
}

files.disks.gcs {
    driver = "gcs"
    project_id = env("GOOGLE_CLOUD_PROJECT_ID", "")
    bucket = env("GOOGLE_CLOUD_STORAGE_BUCKET", "")
    key_file_path = env("GOOGLE_CLOUD_KEY_FILE", "")
    visibility = "private"
}

files.upload {
    max_size = env("UPLOAD_MAX_BYTES", 20971520)
    chunk_size = 5242880
    allowed_mimes = ["image/jpeg", "image/png", "application/pdf"]
}

files.rate_limiting {
    enabled = true
    uploads_per_minute = 10
    bytes_per_hour = 104857600
    concurrent_uploads = 3
}

files.database {
    enabled = env("DATABASE_TRACKING_ENABLED", true)
}

```

### PHP Array Format

[](#php-array-format)

Create `config/files.php`:

```
