Tech Verse Logo
Enable dark mode
Laravel Artifact: Manage Your Media Easily

Laravel Artifact: Manage Your Media Easily

Tech Verse Daily

Tech Verse Daily

4 min read

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

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

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');
    }
}

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');

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+

    Latest Posts

    View All

    Laravel 12.44: Adds HTTP Client afterResponse() Callbacks

    Laravel 12.44: Adds HTTP Client afterResponse() Callbacks

    Laravel Artifact: Manage Your Media Easily

    Laravel Artifact: Manage Your Media Easily

    Handling Large File Uploads in Laravel: A Guide to Chunking & Resuming

    Handling Large File Uploads in Laravel: A Guide to Chunking & Resuming

    Next-Gen Laravel Deployment: FrankenPHP + Octane on Ubuntu VPS

    Next-Gen Laravel Deployment: FrankenPHP + Octane on Ubuntu VPS

    Speed Up Your Laravel App: Mastering Concurrent API Requests with Http::pool and Batch

    Speed Up Your Laravel App: Mastering Concurrent API Requests with Http::pool and Batch

    Beyond the Basics: Building Production-Ready APIs with Laravel

    Beyond the Basics: Building Production-Ready APIs with Laravel

    PHP 8.6: Expected Release Window and RFCs to Watch

    PHP 8.6: Expected Release Window and RFCs to Watch

    Downloading Files from External URLs in Laravel

    Downloading Files from External URLs in Laravel

    Pause and Resume Laravel Queue Workers on Demand

    Pause and Resume Laravel Queue Workers on Demand

    Resume Canvas - Open Source Resume Builder

    Resume Canvas - Open Source Resume Builder