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 خود رها کنید – من دوست دارم به حل آن کمک کنم! 💬