承接 thrive/laravel-model-storage 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

thrive/laravel-model-storage

最新稳定版本:v1.0.0

Composer 安装命令:

composer require thrive/laravel-model-storage

包简介

Manejo de archivos orientado a modelos Eloquent con soporte S3, CloudFront y storage local

README 文档

README

Manejo de archivos orientado a modelos Eloquent con soporte para S3, CloudFront y storage local.

Instalación

composer require thrive/laravel-model-storage

Publicar la configuración:

php artisan vendor:publish --tag="model-storage"

Configuración

El archivo config/model-storage.php permite definir:

return [
    'default' => [
        'disk' => env('MODEL_STORAGE_DISK', 'local'),
    ],

    'url_resolvers' => [
        'cloudfront' => [
            'enabled' => env('MODEL_STORAGE_CLOUDFRONT_ENABLED', false),
            'url'     => env('MODEL_STORAGE_CLOUDFRONT_URL'),
            'prefix'  => env('MODEL_STORAGE_CLOUDFRONT_PREFIX', '/'),
        ],
        's3_direct' => [
            'enabled' => env('MODEL_STORAGE_S3_DIRECT_ENABLED', true),
        ],
    ],

    'extra_mime_types' => [],
];

Uso

Trait HasStorage

Agrega el trait al modelo Eloquent:

use Thrive\Laravel\ModelStorage\HasStorage;

class Noticia extends Model
{
    use HasStorage;
}

Almacenar un archivo subido

$noticia->storeFile($uploadedFile);
$noticia->storeFile($uploadedFile, 'thumbnail');

Almacenar contenido string

$noticia->storeStringContent($content, '.pdf', 'default');

Obtener la URL pública

$url = $noticia->getStorageUrl('.jpg');
$url = $noticia->getStorageUrl('.jpg', 'thumbnail');

Obtener la ruta de almacenamiento

$path = $noticia->getStoragePath('.jpg');

StorageHelper (uso directo sin trait)

use Thrive\Laravel\ModelStorage\StorageHelper;

StorageHelper::storeUploadedFile($model, $file, 'thumbnail');
StorageHelper::getModelStorageUrl($model, '.jpg', 'thumbnail');
StorageHelper::getFile($path);

Validación de tipos de archivo

use Thrive\Laravel\ModelStorage\MimeType\FileTypeValidator;

FileTypeValidator::validateImage($uploadedFile);
FileTypeValidator::validatePdf($uploadedFile);
FileTypeValidator::validateSpreadsheet($uploadedFile);
FileTypeValidator::validate($uploadedFile, ['image/png', 'image/jpeg']);
FileTypeValidator::validateAny($uploadedFile, FileTypeValidator::IMAGES, FileTypeValidator::DOCUMENTS);

Resolución de URLs

La librería usa una cadena de resolvers con prioridad:

  1. CloudFront (si está habilitado en config)
  2. S3 directo (si el disco no es local)
  3. Local (fallback)

Estructura de paths

Los archivos se particionan cada 2 dígitos del ID del modelo:

ID 216599 → {tabla}/21/65/99/216599
ID 216599 con sufijo "thumbnail.jpg" → {tabla}/21/65/99/216599_thumbnail.jpg

Testing

composer install
vendor/bin/phpunit

Requisitos

  • PHP 8.2+
  • Laravel 10.x / 11.x / 12.x

Licencia

MIT

统计信息

  • 总下载量: 12
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-10

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固