PHP code example of elamed123 / laravel-temp-media

1. Go to this page and download the library: Download elamed123/laravel-temp-media library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

elamed123 / laravel-temp-media example snippets


use Medox\LaravelTempMedia\Contracts\TempMediaServiceInterface;

class MediaController extends Controller
{
    public function upload(Request $request, TempMediaServiceInterface $tempMediaService)
    {
        $file = $request->file('file');
        $sessionId = $request->input('session_id', session()->getId());
        
        $result = $tempMediaService->uploadTempMedia($file, $sessionId);
        
        return response()->json($result->toJsonResponse());
    }
}

use Medox\LaravelTempMedia\Traits\HandlesTempMedia;
use Medox\LaravelTempMedia\DTOs\TempMediaTransferDTO;
use Medox\LaravelTempMedia\DTOs\TempMediaItemDTO;
use Spatie\MediaLibrary\HasMedia;

class Post extends Model implements HasMedia
{
    use HandlesTempMedia;
    
    public function attachTempMedia(array $tempMediaIds, string $collectionName = 'images')
    {
        $items = array_map(
            fn($id) => new TempMediaItemDTO($id),
            $tempMediaIds
        );
        
        $transferDto = new TempMediaTransferDTO($items);
        
        return $this->transferTempMedia($transferDto, $collectionName);
    }
}

use Medox\LaravelTempMedia\Contracts\MediaTransferServiceInterface;
use Medox\LaravelTempMedia\DTOs\TempMediaTransferDTO;
use Medox\LaravelTempMedia\DTOs\TempMediaItemDTO;

class PostController extends Controller
{
    public function store(Request $request, MediaTransferServiceInterface $transferService)
    {
        $post = Post::create($request->validated());
        
        $tempMediaIds = $request->input('temp_media_ids', []);
        $items = array_map(
            fn($id) => new TempMediaItemDTO($id),
            $tempMediaIds
        );
        
        $transferDto = new TempMediaTransferDTO($items);
        $result = $transferService->transferTempMediaToModel($post, $transferDto, 'images');
        
        return response()->json([
            'post' => $post,
            'media_transfer' => $result->toArray()
        ]);
    }
}

// config/temp-media.php
return [
    // Basic settings
    'default_ttl_hours' => 24,
    'max_file_size' => 10 * 1024 * 1024, // 10MB
    'allowed_mime_types' => [
        'image/jpeg',
        'image/png',
        'image/webp',
        'image/gif',
    ],
    
    // Security
    'validate_session' => true,
    'rate_limiting' => [
        'enabled' => true,
        'max_attempts' => 60,
        'decay_minutes' => 1,
    ],
    
    // Cleanup
    'enable_auto_cleanup' => true,
    'cleanup_schedule' => [
        'frequency' => 'hourly',
        'without_overlapping' => true,
        'run_in_background' => true,
    ],
    
    // Events
    'dispatch_events' => true,
    
    // Media conversions
    'generate_conversions' => false,
];

use Medox\LaravelTempMedia\Contracts\TempMediaServiceInterface;
use Medox\LaravelTempMedia\Contracts\MediaTransferServiceInterface;

// Clean up expired media
$expiredCount = app(TempMediaServiceInterface::class)->cleanupExpired();

// Clean up processed media
$processedCount = app(MediaTransferServiceInterface::class)->cleanupProcessedTempMedia();

use Medox\LaravelTempMedia\Events\TempMediaUploaded;

Event::listen(TempMediaUploaded::class, function (TempMediaUploaded $event) {
    // Handle upload event
    Log::info('Media uploaded', ['id' => $event->tempMedia->id]);
});

use Medox\LaravelTempMedia\Events\MediaTransferred;

Event::listen(MediaTransferred::class, function (MediaTransferred $event) {
    // Handle transfer event
    Notification::send($event->targetModel->user, new MediaTransferredNotification());
});

use Medox\LaravelTempMedia\Events\TempMediaExpired;

Event::listen(TempMediaExpired::class, function (TempMediaExpired $event) {
    // Handle expiration event
    Log::info('Media expired', ['id' => $event->tempMedia->id]);
});

use Medox\LaravelTempMedia\Tests\TestCase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;

class TempMediaUploadTest extends TestCase
{
    public function test_can_upload_temporary_media()
    {
        Storage::fake('public');
        
        $file = UploadedFile::fake()->image('test.jpg');
        
        $response = $this->postJson('/api/v1/temp-media', [
            'file' => $file
        ]);
        
        $response->assertStatus(201)
                ->assertJsonStructure([
                    'success',
                    'data' => [
                        'id',
                        'url',
                        'original_name',
                        'mime_type',
                        'size',
                        'expires_at',
                        'is_temporary'
                    ]
                ]);
    }
}

$customProperties = [
    'alt_text' => 'Product image',
    'category' => 'product',
    'featured' => true
];

$result = $transferService->transferTempMediaToModel(
    $model,
    $transferDto,
    'images',
    $customProperties
);

$items = [
    new TempMediaItemDTO('temp-id-1', 1), // First position
    new TempMediaItemDTO('temp-id-2', 2), // Second position
    new TempMediaItemDTO('temp-id-3', 3), // Third position
];

$transferDto = new TempMediaTransferDTO($items);

// In config/temp-media.php
'generate_conversions' => true,
bash
php artisan vendor:publish --provider="Medox\LaravelTempMedia\TempMediaServiceProvider" --tag="temp-media-config"
php artisan vendor:publish --provider="Medox\LaravelTempMedia\TempMediaServiceProvider" --tag="temp-media-migrations"
bash
php artisan migrate
bash
# Run all tests
php artisan test

# Run specific test suite
php artisan test --testsuite=Feature
php artisan test --testsuite=Unit