برنامه نویسی

7 راه برای ذخیره سازی پرونده Laravel

تا به حال با مدیریت پرونده در لاراول دست و پنجه نرم کرده اید؟ بگذارید امروز به شما نشان دهم که چگونه آن را حل کنم.

تصور کنید که برنامه های وب زیبا را ایجاد کنید که در آن بارگذاری پرونده ، بارگیری و ذخیره سازی فقط … کار کنید. سردرد بیشتر با تنظیمات ذخیره سازی یا ادغام ابر نیست. این راهنما نحوه عملکرد پرونده ها را در لاراول برای همیشه تغییر می دهد.

قدرت انتزاع سیستم فایل لاراول

رسیدگی به سیستم فایل های لاراول فقط خوب نیست – استثنایی است. Laravel با بسته بندی Frank De Jonge's Flysystem PHP ، یک API یکپارچه را به شما می دهد که در فضای ذخیره سازی محلی ، Amazon S3 ، SFTP و موارد دیگر کار می کند.

این برای شما چه معنی دارد؟ شما می توانید با استفاده از ذخیره سازی دستگاه خود به صورت محلی توسعه داده و با استفاده از S3 بدون تغییر یک خط کد ، به تولید بپردازید. این یکپارچه است

// This same code works whether you're using local storage or S3
Storage::put('avatars/1', $fileContent);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

جادو در چگونگی انتزاع لاراول تمام پیچیدگی های پشت یک رابط تمیز و سازگار است. شما روی منطق برنامه خود تمرکز می کنید در حالی که لاراول جزئیات سیستم فایل را کنترل می کند.

تنظیم پیکربندی سیستم فایل خود را ⚙

همه چیز با پرونده پیکربندی واقع در config/filesystems.phpبشر این مرکز فرمان شما برای کلیه تنظیمات مربوط به ذخیره سازی است.

در این پرونده ، خواهید یافت:

  • تنظیمات دیسک (محلی ، S3 و غیره)
  • تنظیمات پیش فرض دیسک
  • گزینه های خاص راننده

هر “دیسک” یک مکان ذخیره سازی با درایور خود را نشان می دهد. در اینجا یک پیکربندی معمولی به نظر می رسد:

'disks' => [
    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
        'throw' => false,
    ],

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        'throw' => false,
    ],
],
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

زیبایی این روش این است که شما می توانید چندین دیسک را پیکربندی کنید ، حتی با استفاده از همان درایور. برای پرونده های عمومی و خصوصی به سطل S3 جداگانه نیاز دارید؟ مشکلی نیست! فقط دو تنظیم دیسک مختلف ایجاد کنید.

کار با ذخیره سازی محلی

درایور محلی نقطه شروع شماست – مناسب برای توسعه و برنامه های کوچکتر. به طور پیش فرض ، به آن اشاره می کند storage/app/private، دایرکتوری که از دسترسی عمومی محافظت می شود.

در اینجا نحوه نوشتن پرونده آورده شده است:

use Illuminate\Support\Facades\Storage;

Storage::disk('local')->put('example.txt', 'File contents here');
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این فروشگاه ها example.txt در storage/app/private/example.txtبشر ساده ، درست است؟

اما در مورد پرونده هایی که باید در دسترس عموم باشند چیست؟

ساخت پرونده ها در دسترس عموم

Laravel شامل پیکربندی دیسک ویژه “عمومی” برای پرونده هایی است که باید در وب قابل دسترسی باشد. این پرونده ها در ذخیره می شوند storage/app/public به طور پیش فرض

با این حال ، یک صید وجود دارد: این فهرست از وب خارج از جعبه در دسترس نیست. شما باید یک پیوند نمادین ایجاد کنید که آن را به فهرست عمومی شما متصل کند:

php artisan storage:link
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این دستور یک پیوند نمادین از storage/app/public به public/storage، در دسترس قرار دادن پرونده های خود از طریق URL مانند:

echo asset('storage/my-file.jpg'); // Returns something like: http://yourdomain.com/storage/my-file.jpg
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

همچنین می توانید چندین پیوند نمادین را در خود پیکربندی کنید filesystems.php پیکربندی:

'links' => [
    public_path('storage') => storage_path('app/public'),
    public_path('images') => storage_path('app/images'),
],
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در صورت نیاز به حذف این پیوندها ، لاراول ارائه می دهد:

php artisan storage:unlink
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

گسترش به فضای ذخیره سازی با S3 ☁

با رشد برنامه شما ، احتمالاً می خواهید به فضای ذخیره سازی ابر بروید. آمازون S3 محبوب ترین گزینه است و لاراول انتقال را صاف می کند.

ابتدا بسته مورد نیاز را نصب کنید:

composer require league/flysystem-aws-s3-v3 "^3.0" --with-all-dependencies
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس خود را پیکربندی کنید .env پرونده:

AWS_ACCESS_KEY_ID=your-key-id
AWS_SECRET_ACCESS_KEY=your-secret-access-key
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=your-bucket-name
AWS_USE_PATH_STYLE_ENDPOINT=false
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون می توانید از S3 درست مانند ذخیره محلی استفاده کنید:

Storage::disk('s3')->put('avatars/1', $fileContent);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بهترین قسمت؟ کد برنامه شما به هیچ وجه تغییر نمی کند – فقط پیکربندی.

گزینه های ذخیره سازی جایگزین: FTP و SFTP

لاراول محدود به ذخیره سازی محلی و S3 نیست. همچنین می توانید از FTP و SFTP برای ذخیره سازی فایل استفاده کنید.

برای FTP

بسته را نصب کنید:

composer require league/flysystem-ftp "^3.0"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و پیکربندی مانند:

'ftp' => [
    'driver' => 'ftp',
    'host' => env('FTP_HOST'),
    'username' => env('FTP_USERNAME'),
    'password' => env('FTP_PASSWORD'),
    'port' => env('FTP_PORT', 21),
    'root' => env('FTP_ROOT'),
    'passive' => true,
    'ssl' => true,
    'timeout' => 30,
],
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای SFTP

بسته SFTP را نصب کنید:

composer require league/flysystem-sftp-v3 "^3.0"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و آن را پیکربندی کنید:

'sftp' => [
    'driver' => 'sftp',
    'host' => env('SFTP_HOST'),
    'username' => env('SFTP_USERNAME'),
    'password' => env('SFTP_PASSWORD'),
    'privateKey' => env('SFTP_PRIVATE_KEY'),
    'passphrase' => env('SFTP_PASSPHRASE'),
    'visibility' => 'private',
    'directory_visibility' => 'private',
    'port' => env('SFTP_PORT', 22),
    'root' => env('SFTP_ROOT', ''),
    'timeout' => 30,
],
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از این تنظیمات ، می توانید با استفاده از همان API نمای ذخیره سازی یکپارچه با سرورهای فایل از راه دور کار کنید.

ویژگی های پیشرفته سیستم فایل

سیستم فایل Laravel فراتر از عملیات پرونده های اساسی با ویژگی های پیشرفته مانند سیستم های فایل Scoped و فقط خواندنی است.

سیستم های فایل scoped

آیا نیاز به محدود کردن عملیات به یک فهرست خاص دارید؟ سیستم های فایل scoped پاسخ است:

composer require league/flysystem-path-prefixing "^3.0"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس دیسک scoped خود را پیکربندی کنید:

's3-videos' => [
    'driver' => 'scoped',
    'disk' => 's3',
    'prefix' => 'path/to/videos',
],
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون ، هنگام استفاده Storage::disk('s3-videos')، تمام عملیات به طور خودکار با پیشوند path/to/videosبشر

سیستم های فایل فقط خواندنی

برای امنیت ، شما ممکن است بخواهید از نوشتن در مورد دیسک های خاص جلوگیری کنید:

composer require league/flysystem-read-only "^3.0"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس پرچم فقط خواندنی را اضافه کنید:

's3-archives' => [
    'driver' => 's3',
    // other settings...
    'read-only' => true,
],
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون هرگونه تلاش برای نوشتن به این دیسک ، از داده های بایگانی شده شما محافظت می کند.

گزینه های سازگار S3

طرفدار آمازون S3 نیست؟ لاراول با گزینه های سازگار با S3 بسیار عالی عمل می کند مانند:

  • مینیو
  • فضاهای دیجیتال
  • CloudFlare R2
  • ذخیره شیء Vultr
  • ذخیره ابری هتزنر

فقط اعتبار و نقطه پایانی خود را به روز کنید:

'endpoint' => env('AWS_ENDPOINT', 'https://minio:9000'),
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای Minio به طور خاص ، شما می خواهید URL را برای پیوند مناسب پیکربندی کنید:

AWS_URL=http://localhost:9000/local
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از نمای ذخیره سازی در برنامه خود

نمای ذخیره سازی دروازه شما برای کلیه عملیات سیستم های فایل است. در اینجا نحوه استفاده موثر از آن آورده شده است:

با استفاده از دیسک پیش فرض

اگر دیسک را مشخص نکنید ، لاراول از دیسک پیش فرض از پیکربندی خود استفاده می کند:

use Illuminate\Support\Facades\Storage;

// Uses the default disk
Storage::put('file.txt', 'Contents');
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کار با دیسک های خاص

می توانید از کدام دیسک استفاده کنید:

// Uses the S3 disk
Storage::disk('s3')->put('file.txt', 'Contents');
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ایجاد دیسک های تقاضا

بعضی اوقات به دیسک موقت نیاز دارید که در پیکربندی خود تعریف نشده باشد. لاراول را تحت پوشش قرار داده است:

use Illuminate\Support\Facades\Storage;

$disk = Storage::build([
    'driver' => 'local',
    'root' => '/path/to/specific/folder',
]);

$disk->put('image.jpg', $content);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این یک دیسک سفارشی را در زمان اجرا ایجاد می کند بدون اینکه پرونده های پیکربندی خود را اصلاح کنید – برای سناریوهای پویا کامل.

چه چیزی بعدی؟ استفاده بیشتر از مهارت های ذخیره سازی پرونده Laravel

اکنون که اصول اولیه سیستم فایل لاراول را درک کردید ، آماده هستید تا عمیق تر شیرجه بزنید. در سفر Laravel ، شما می آموزید که چگونه:

  • فایلهای بزرگ را به طور کارآمد پخش کنید
  • URL های از پیش امضا شده را برای دسترسی ایمن و موقت تولید کنید
  • آپلودهای پرونده را با میله های پیشرفت پیاده سازی کنید
  • درایورهای سیستم فایل سفارشی را برای سیستم های ذخیره سازی تخصصی ایجاد کنید
  • عملیات پرونده خود را در انزوا آزمایش کنید

هنگامی که شما استاد سیستم فایل لاراول هستید ، امکانات بی پایان است.

آماده تبدیل شدن به یک متخصص ذخیره فایل لاراول هستید؟ اگر می خواهید آموزش های پیشرفته تری در مورد موضوعات ذخیره سازی فایل خاص داشته باشید ، دست خود را بالا ببرید! 👋

به نکات و منابع لارو بیشتر نیاز دارید؟ با من ارتباط برقرار کنید:

نظر خود را با بزرگترین چالش ذخیره سازی فایل Laravel خود رها کنید – من دوست دارم به حل آن کمک کنم! 💬

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا