laraveljutsu/laravel-artifact
最新稳定版本:v1.0.0
Composer 安装命令:
composer require laraveljutsu/laravel-artifact
包简介
Artifact — Lightweight package that just handles basic media management with no fuss.
README 文档
README
Laravel Artifact is a lightweight package for media management in Laravel applications. It makes file uploads, storage, and retrieval easy — with support for public/private disks, signed URLs, and automatic deduplication.
✨ Features
- Simple file upload and storage management
- Support for multiple storage disks (local, S3, etc.)
- Automatic deduplication to prevent duplicate files
- Signed URLs for secure file access
- Clean one-to-one and one-to-many file relationships
- Automatic metadata tracking (filename, MIME type, size)
📦 Installation
Install via Composer:
composer require laraveljutsu/laravel-artifact
Publish the configuration and run migrations:
php artisan vendor:publish --tag="laravel-artifact"
🚀 Usage
1. Configure the package
Configure the package in the config/artifact.php file.
return [ 'model' => LaravelJutsu\Artifact\Artifact::class, 'table_name' => 'artifacts', 'routes' => [ 'prefix' => env('ARTIFACT_ROUTE_PREFIX', 'artifacts'), 'middleware' => ['web'], ], 'signed_url' => [ 'expiration_minutes' => env('ARTIFACT_SIGNED_URL_EXPIRATION', 60), ], ]; // .env ARTIFACT_ROUTE_PREFIX=artifacts ARTIFACT_SIGNED_URL_EXPIRATION=60
After configuring the package, run the migrations:
php artisan optimize php artisan migrate
2. Add the trait to your model
<?php use LaravelJutsu\Artifact\Concerns\HasArtifacts; use Illuminate\Database\Eloquent\Model; class User extends Model { use HasArtifacts; // Single file relationship public function avatar() { return $this->singleArtifact('avatar'); } // Multiple files relationship public function documents() { return $this->manyArtifacts('documents'); } }
3. Store files
$user = User::find(1); $file = request()->file('avatar'); // Single file (one-to-one) $artifact = $user->avatar()->store($file); // Multiple files (one-to-many) $artifacts = $user->documents()->store(request()->file('documents')); // Specify storage disk $artifact = $user->avatar()->store($file); // Uses default disk $artifacts = $user->documents()->store($files, 'public');
4. Access files and metadata
$avatar = $user->avatar; if ($avatar) { // Get URLs echo $avatar->rawUrl(); // Direct URL (public disks only) echo $avatar->streamUrl(); // Streaming URL (works for all disks) echo $avatar->signedUrl(); // Permanent signed URL echo $avatar->temporarySignedUrl(60); // Expiring signed URL (60 minutes) // Access metadata echo $avatar->file_name; // Original filename echo $avatar->mime_type; // File MIME type echo $avatar->size; // File size in bytes echo $avatar->disk; // Storage disk name } // Working with multiple files foreach ($user->documents as $document) { echo $document->file_name . ' (' . $document->size . ' bytes)'; echo $document->streamUrl(); }
📋 Requirements
- PHP 8.2+
- Laravel 10+
📄 License
The MIT License (MIT). Please see License File for more information.
统计信息
- 总下载量: 472
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 94
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-08-25
