در بسیاری از پروژههای Laravel لازم است فایلهایی مانند تصویر محصول، تصویر پروفایل، فایل PDF، مدارک کاربران، فایلهای آموزشی یا فایلهای مربوط به سفارشها را ذخیره و مدیریت کنیم.
در نگاه اول ممکن است ذخیره کردن یک فایل روی سرور کار سادهای به نظر برسد؛ اما وقتی پروژه بزرگتر میشود، موضوعاتی مانند محل ذخیره فایل، فایلهای عمومی و خصوصی، نامگذاری فایلها، حذف فایلهای قدیمی، جابهجایی فایلها و حتی استفاده از فضای ذخیرهسازی خارجی اهمیت زیادی پیدا میکنند.
Laravel برای حل این مسائل یک سیستم قدرتمند به نام Filesystem در اختیار توسعهدهندگان قرار میدهد.
با استفاده از Storage در Laravel میتوانیم بدون وابستگی شدید به مسیرهای فیزیکی سرور، فایلها را ذخیره، دریافت، حذف، کپی و جابهجا کنیم.
در این مقاله با مفهوم Storage، Disk، Filesystem، Storage Facade، public و local، دستور storage:link و روشهای مدیریت فایل در Laravel آشنا میشویم.
Storage در Laravel چیست؟
Storage در Laravel مجموعه امکاناتی است که برای مدیریت فایلها و محل ذخیرهسازی آنها در اختیار برنامه قرار دارد.
به جای اینکه در تمام قسمتهای برنامه مستقیماً با مسیرهای فیزیکی سرور کار کنیم، میتوانیم از API مربوط به Storage استفاده کنیم.
برای مثال:
use Illuminate\Support\Facades\Storage;
Storage::put('example.txt', 'Hello Laravel');
یا:
Storage::delete('example.txt');
این روش باعث میشود منطق مدیریت فایل از مسیرهای فیزیکی سیستمعامل جدا شود.
Filesystem در Laravel چیست؟
Laravel برای مدیریت فایلها از یک abstraction یا لایه انتزاعی به نام Filesystem استفاده میکند.
این موضوع اهمیت زیادی دارد؛ زیرا برنامه شما نباید برای هر عملیات فایل به مسیرهای فیزیکی وابسته باشد.
برای مثال ممکن است امروز فایلها را روی سرور محلی ذخیره کنید:
Local Server
اما در آینده بخواهید آنها را به یک فضای ذخیرهسازی ابری منتقل کنید.
اگر تمام کد برنامه مستقیماً به مسیرهای سرور وابسته باشد، انجام این تغییر دشوار میشود.
Storage این وابستگی را کاهش میدهد.
# Disk در Laravel چیست؟
یکی از مهمترین مفاهیم Storage در Laravel، Disk است.
Disk مشخص میکند فایلها در چه نوع Storage و چه محل یا سرویسی ذخیره شوند.
برای مثال یک Disk میتواند برای فایلهای محلی باشد و Disk دیگری برای فایلهای عمومی.
تنظیمات Diskها معمولاً در فایل زیر قرار دارند:
config/filesystems.php
ساختار این فایل به صورت کلی شامل تنظیمات Filesystem و Diskهای مختلف است.
Disk پیشفرض در Laravel
Laravel یک Disk پیشفرض دارد که از طریق تنظیمات Filesystem مشخص میشود.
برای مثال میتوانید Disk پیشفرض را در محیط پروژه کنترل کنید.
در .env معمولاً تنظیمی مانند این وجود دارد:
FILESYSTEM_DISK=local
در نتیجه زمانی که بدون تعیین Disk از Storage استفاده میکنید، عملیات روی Disk پیشفرض انجام میشود.
مثلاً:
Storage::put('test.txt', 'Hello');
از Disk پیشفرض استفاده میکند.
# Diskهای مهم Laravel
در یک پروژه معمولاً با Diskهایی مانند موارد زیر سروکار داریم:
localpublic- Diskهای سفارشی
- Storageهای ابری مانند S3
دو Disk مهم برای شروع کار، local و public هستند.
# Disk local در Laravel
Disk local معمولاً برای فایلهایی مناسب است که قرار نیست مستقیماً به صورت عمومی از طریق مرورگر قابل دسترسی باشند.
برای مثال:
Storage::disk('local')->put(
'documents/example.txt',
'Private document'
);
در این حالت فایل در Storage مربوط به Disk محلی ذخیره میشود.
این نوع Storage برای فایلهای خصوصی مانند:
- مدارک کاربران
- فایلهای داخلی سیستم
- گزارشها
- فایلهای پردازششده
- فایلهای موقت
میتواند مناسب باشد.
# Disk public در Laravel
Disk public برای فایلهایی مناسب است که باید امکان دسترسی عمومی به آنها وجود داشته باشد.
برای مثال:
- تصاویر محصولات
- تصاویر مقالات
- تصاویر پروفایل عمومی
- فایلهای عمومی سایت
میتوان فایل را روی Disk public ذخیره کرد:
Storage::disk('public')->put(
'products/example.txt',
'Product file'
);
اما ذخیره فایل روی Disk public به تنهایی به معنی قابل دسترس بودن مستقیم آن از طریق مرورگر نیست.
برای این کار باید لینک Storage ایجاد شود.
# storage:link در Laravel چیست؟
Laravel برای دسترسی عمومی به فایلهای Disk public امکان ایجاد یک Symbolic Link را فراهم میکند.
برای ایجاد این لینک از دستور Artisan زیر استفاده کنید:
php artisan storage:link
بعد از اجرای این دستور، Laravel لینک موردنیاز را ایجاد میکند تا فایلهای عمومی Storage از مسیر مناسب وب قابل دسترسی باشند.
به صورت مفهومی:
storage/app/public
↓
storage:link
↓
public/storage
بنابراین فایلهایی که در storage/app/public قرار گرفتهاند میتوانند از طریق مسیر عمومی مناسب در سایت ارائه شوند.
# چه زمانی باید از public و چه زمانی از local استفاده کنیم؟
این تصمیم به نوع فایل بستگی دارد.
| نوع فایل | Disk پیشنهادی |
|---|---|
| تصویر محصول | public |
| تصویر مقاله | public |
| آواتار عمومی | public |
| فایل CSS یا Asset تولیدشده | بسته به معماری پروژه |
| مدارک هویتی | local |
| قرارداد کاربران | local |
| فایل خصوصی سفارش | local |
| گزارش داخلی | local |
| فایل قابل دانلود عمومی | public |
اصل مهم این است:
> فایلهایی که نباید هر کاربری به آنها دسترسی داشته باشد را به صورت عمومی ذخیره نکنید.
# استفاده از Storage Facade
برای کار با Storage معمولاً از Facade مربوط به آن استفاده میکنیم:
use Illuminate\Support\Facades\Storage;
بعد میتوانیم عملیات مختلفی انجام دهیم.
برای مثال:
Storage::put('example.txt', 'Hello Laravel');
یا:
Storage::delete('example.txt');
یا:
Storage::exists('example.txt');
این روش بسیار تمیزتر از کار مستقیم با مسیرهای فیزیکی سرور است.
# ایجاد فایل با Storage::put
یکی از سادهترین عملیات Storage، ایجاد یک فایل است.
Storage::put(
'example.txt',
'Hello Laravel'
);
در این مثال یک فایل به نام example.txt ایجاد میشود و متن مشخصشده در آن قرار میگیرد.
میتوانیم مسیر پوشه را نیز مشخص کنیم:
Storage::put(
'documents/example.txt',
'Hello Laravel'
);
در این حالت فایل داخل پوشه documents قرار میگیرد.
# استفاده از Disk مشخص
اگر بخواهیم Disk مشخصی را انتخاب کنیم:
Storage::disk('public')->put(
'documents/example.txt',
'Hello Laravel'
);
یا:
Storage::disk('local')->put(
'private/example.txt',
'Private content'
);
این روش زمانی بسیار مفید است که پروژه چند نوع Storage داشته باشد.
# بررسی وجود فایل
گاهی لازم است قبل از انجام عملیات بررسی کنیم که فایل وجود دارد یا خیر.
برای این کار:
if (Storage::exists('example.txt')) {
// فایل وجود دارد
}
برای Disk مشخص:
if (Storage::disk('public')->exists('example.txt')) {
// فایل وجود دارد
}
این قابلیت برای عملیاتهایی مانند حذف، جایگزینی یا دانلود فایل کاربرد زیادی دارد.
# دریافت محتوای فایل
اگر بخواهیم محتوای یک فایل متنی را دریافت کنیم:
$content = Storage::get('example.txt');
برای Disk مشخص:
$content = Storage::disk('local')->get(
'example.txt'
);
این قابلیت بیشتر برای فایلهایی کاربرد دارد که برنامه نیاز دارد محتوای آنها را بخواند.
# حذف فایل در Laravel
برای حذف فایل میتوانیم از delete() استفاده کنیم:
Storage::delete('example.txt');
یا:
Storage::disk('public')->delete(
'products/example.jpg'
);
میتوان چند فایل را نیز برای حذف ارسال کرد:
Storage::delete([
'example.txt',
'example2.txt',
]);
# چرا حذف فایلهای قدیمی مهم است؟
فرض کنید کاربر تصویر پروفایل خود را تغییر میدهد.
اگر تصویر قبلی را حذف نکنیم، با گذشت زمان تعداد زیادی فایل بدون استفاده روی سرور باقی میماند.
مثلاً:
avatars/
├── old-avatar-1.jpg
├── old-avatar-2.jpg
├── old-avatar-3.jpg
├── old-avatar-4.jpg
└── current-avatar.jpg
در پروژههای کوچک شاید این موضوع در ابتدا قابل توجه نباشد، اما در یک سیستم بزرگ میتواند باعث مصرف بیدلیل فضای Storage شود.
بنابراین هنگام جایگزینی فایل، بهتر است در صورت نیاز فایل قبلی نیز حذف شود.
# جابهجایی فایل با move
برای انتقال فایل از یک مسیر به مسیر دیگر میتوان از move() استفاده کرد:
Storage::move(
'old/example.txt',
'new/example.txt'
);
برای Disk مشخص:
Storage::disk('public')->move(
'old/example.jpg',
'products/example.jpg'
);
این قابلیت برای تغییر ساختار پوشهها یا انتقال فایلهای موقت به محل نهایی کاربرد دارد.
# کپی کردن فایل با copy
گاهی به جای انتقال، میخواهیم یک نسخه دیگر از فایل ایجاد کنیم.
برای این کار:
Storage::copy(
'example.txt',
'backup/example.txt'
);
در این حالت فایل اصلی باقی میماند و نسخه دیگری در مسیر جدید ایجاد میشود.
# دریافت URL فایل
برای فایلهایی که روی Disk عمومی قرار دارند، میتوان URL فایل را دریافت کرد.
مثلاً:
$url = Storage::url('products/example.jpg');
یا برای Disk مشخص:
$url = Storage::disk('public')->url(
'products/example.jpg'
);
سپس میتوان از آن برای نمایش تصویر استفاده کرد:
<img
src="{{ Storage::disk('public')->url($product->image) }}"
alt="{{ $product->name }}"
>
# نمایش تصویر ذخیرهشده در Laravel
فرض کنید مسیر تصویر محصول در Database ذخیره شده است:
products/abc123.webp
میتوانیم در Blade بنویسیم:
<img
src="{{ Storage::disk('public')->url($product->image) }}"
alt="{{ $product->name }}"
>
در این حالت برنامه URL مناسب فایل را تولید میکند.
این روش بهتر از آن است که در بخشهای مختلف پروژه مسیرهای فیزیکی Storage را به صورت دستی بنویسیم.
# دریافت مسیر واقعی فایل
گاهی خود برنامه نیاز دارد مسیر فایل روی سیستم را بداند.
برای Diskهای محلی میتوان از:
$path = Storage::path('example.txt');
یا:
$path = Storage::disk('public')->path(
'products/example.jpg'
);
استفاده کرد.
این قابلیت در شرایطی کاربرد دارد که یک کتابخانه PHP یا ابزار پردازشی نیاز به مسیر فیزیکی فایل داشته باشد.
# تفاوت Path و URL
یکی از اشتباهات رایج این است که Path و URL را با یکدیگر اشتباه بگیریم.
Path مسیر فیزیکی فایل روی سیستم است.
مثلاً:
/home/site/storage/app/public/products/image.jpg
اما URL آدرسی است که مرورگر برای دسترسی به فایل استفاده میکند.
مثلاً:
/storage/products/image.jpg
بنابراین:
Storage::path(...)
و:
Storage::url(...)
کار یکسانی انجام نمیدهند.
# ساخت پوشه در Storage
در بسیاری از موارد نیازی نیست پوشه را به صورت دستی ایجاد کنیم.
برای مثال:
Storage::put(
'products/images/example.jpg',
$content
);
Laravel در زمان ذخیره فایل میتواند ساختار لازم را مدیریت کند.
بنابراین معمولاً لازم نیست قبل از هر Upload به صورت دستی پوشه ایجاد کنیم.
# کار با فایل آپلودشده و Storage
در مقاله قبلی درباره File Upload یاد گرفتیم چگونه فایل را از Request دریافت کنیم.
حالا میتوانیم آن فایل را روی Disk مشخص ذخیره کنیم.
برای مثال:
$imagePath = $request
->file('image')
->store('products', 'public');
در اینجا:
Request
↓
Uploaded File
↓
Storage
↓
public Disk
↓
products/
این یکی از رایجترین الگوهای مدیریت تصاویر در پروژههای Laravel است.
# ساختار پیشنهادی پوشهها
در پروژههای واقعی بهتر است فایلها را بر اساس کاربردشان دستهبندی کنیم.
مثلاً:
products/
images/
users/
avatars/
articles/
images/
documents/
invoices/
orders/
attachments/
این ساختار باعث میشود مدیریت فایلها در پروژههای بزرگتر سادهتر شود.
# مدیریت فایلهای خصوصی
یکی از مهمترین مزیتهای Storage این است که میتوانیم فایلهایی داشته باشیم که مستقیماً Public نباشند.
فرض کنید کاربر یک فایل خصوصی ارسال کرده است:
$path = $request->file('document')
->store('documents', 'local');
حالا نمیخواهیم کاربر بتواند فقط با داشتن یک URL عمومی به فایل دسترسی پیدا کند.
در چنین شرایطی میتوانیم یک Route ایجاد کنیم و قبل از ارائه فایل، مجوز دسترسی کاربر را بررسی کنیم.
برای مثال:
public function download(Document $document)
{
abort_unless(
$document->user_id === auth()->id(),
403
);
return Storage::download(
$document->path,
$document->original_name
);
}
در این روش ابتدا دسترسی کاربر بررسی میشود و سپس فایل برای دانلود ارسال میشود.
این الگو برای فایلهای حساس بسیار مهم است.
# Storage::download چیست؟
اگر بخواهیم فایل را برای دانلود به کاربر ارسال کنیم، میتوانیم از:
return Storage::download(
'documents/example.pdf'
);
استفاده کنیم.
میتوانیم نامی که کاربر هنگام دانلود مشاهده میکند را نیز مشخص کنیم:
return Storage::download(
'documents/example.pdf',
'invoice.pdf'
);
این قابلیت برای فایلهای خصوصی و سیستمهای مدیریت اسناد بسیار کاربردی است.
# Storage و Database
یکی از معماریهای رایج در پروژههای Laravel این است:
Database
↓
products
↓
image = products/abc123.webp
Storage
↓
products/
↓
abc123.webp
یعنی Database فقط اطلاعات مربوط به فایل را نگهداری میکند و خود فایل در Storage قرار دارد.
برای مثال:
$product->image = 'products/abc123.webp';
این معماری باعث میشود Database بیش از حد بزرگ نشود و مدیریت فایل از دادههای اصلی سیستم جدا بماند.
# آیا مسیر کامل فایل را در Database ذخیره کنیم؟
معمولاً بهتر است مسیر نسبی فایل را ذخیره کنیم.
مثلاً:
products/abc123.webp
نه:
/home/example.com/public_html/storage/app/public/products/abc123.webp
زیرا مسیر فیزیکی سرور ممکن است در محیطهای مختلف تغییر کند.
ممکن است پروژه از:
- سیستم توسعه
- سرور تست
- سرور Production
- Storage ابری
استفاده کند.
Storage abstraction کمک میکند این وابستگی کاهش پیدا کند.
# استفاده از Storage در Model
بهتر است منطق مربوط به فایل را بیدلیل داخل Model قرار ندهیم.
در پروژههای ساده میتوان عملیات را در Service یا Controller انجام داد.
در پروژههای بزرگتر بهتر است منطق پیچیده فایل را در یک Service اختصاصی قرار دهیم.
مثلاً:
app/
└── Services/
└── FileService.php
سپس عملیاتهایی مانند Upload، Delete و Replace را در آن مدیریت کنیم.
این کار باعث میشود Controllerها بیش از حد شلوغ نشوند.
# Storage در پروژههای بزرگ
در یک پروژه کوچک ممکن است چند خط کد برای مدیریت فایل کافی باشد.
اما در یک پروژه بزرگتر مانند:
- فروشگاه اینترنتی
- CMS
- Marketplace
- سیستم آموزشی
- SaaS
- سیستم مدیریت اسناد
تعداد فایلها بسیار زیاد میشود.
در این شرایط بهتر است موارد زیر از ابتدا در معماری پروژه در نظر گرفته شوند:
- نوع فایل
- عمومی یا خصوصی بودن
- Disk مورد استفاده
- ساختار پوشهها
- نامگذاری فایل
- حذف فایلهای قدیمی
- دسترسی کاربران
- Backup
- فضای ذخیرهسازی
- فایلهای بزرگ
- Storage خارجی
# استفاده از Storage خارجی
یکی از مزیتهای Laravel Filesystem این است که معماری Storage به گونهای طراحی شده که میتوان Storageهای مختلفی را مدیریت کرد.
برای مثال در پروژههای بزرگ ممکن است فایلها به جای سرور اصلی روی سرویسهایی مانند Object Storage قرار بگیرند.
در چنین معماریای:
Laravel Application
↓
Filesystem
↓
Object Storage
↓
Files
این موضوع برای پروژههایی که تعداد فایل یا حجم Storage زیادی دارند اهمیت زیادی پیدا میکند.
# چرا نباید همه فایلها را روی سرور اصلی نگه داریم؟
برای پروژههای کوچک نگهداری فایل روی همان سرور کاملاً میتواند منطقی باشد.
اما با رشد پروژه ممکن است مشکلاتی ایجاد شود:
- افزایش مصرف Disk
- سختتر شدن Backup
- افزایش حجم Deployment
- دشوار شدن Scaling
- وابستگی فایلها به یک Server
- افزایش هزینه انتقال داده
- پیچیدهتر شدن معماری چند سروری
به همین دلیل در پروژههای بزرگ استفاده از Object Storage میتواند گزینه مناسبی باشد.
# Storage و Backup
فایلها بخشی از اطلاعات مهم یک سیستم هستند.
فرض کنید Database شما به طور کامل Backup شده باشد اما فایلهای کاربران از بین رفته باشند.
در چنین شرایطی Database ممکن است مسیر فایل را داشته باشد، اما خود فایل دیگر وجود نداشته باشد.
بنابراین Backup حرفهای باید در صورت نیاز هر دو بخش را پوشش دهد:
Database Backup
+
File Storage Backup
این موضوع بهخصوص برای سایتهایی که تصاویر، اسناد یا فایلهای کاربران را نگهداری میکنند بسیار مهم است.
# نکات امنیتی Storage در Laravel
Storage فقط یک ابزار برای ذخیره فایل نیست؛ نحوه استفاده از آن نیز روی امنیت سیستم تأثیر دارد.
فایلهای خصوصی را Public نکنید
اگر فایل فقط برای یک کاربر خاص است، نباید بدون نیاز در Public Storage قرار بگیرد.
دسترسی را قبل از Download بررسی کنید
برای فایلهای خصوصی ابتدا مجوز کاربر را بررسی کنید.
مسیر فایل را از کاربر نگیرید
نباید به کاربر اجازه دهید هر مسیر دلخواهی را به برنامه ارسال کند و برنامه مستقیماً همان مسیر را بخواند.
فایلهای قدیمی را مدیریت کنید
فایلهایی که دیگر استفاده نمیشوند ممکن است به مرور زمان فضای زیادی مصرف کنند.
نوع فایل را در زمان Upload کنترل کنید
Storage مسئول اعتبارسنجی فایل نیست؛ اعتبارسنجی باید قبل از ذخیره فایل انجام شود.
# تفاوت File Upload و Storage در Laravel
این دو مفهوم ارتباط نزدیکی دارند اما نباید آنها را یکی بدانیم.
File Upload
تمرکز روی دریافت فایل از کاربر است.
مثلاً:
$request->file('image')
و سپس:
$file->store(...)
Storage
تمرکز روی مدیریت محل و نحوه ذخیره فایل است.
مانند:
Storage::put(...)
Storage::get(...)
Storage::delete(...)
Storage::move(...)
Storage::copy(...)
Storage::url(...)
به زبان ساده:
File Upload
= دریافت فایل
Storage
= مدیریت فایل
# اشتباهات رایج در استفاده از Storage
۱. استفاده مستقیم از مسیرهای فیزیکی در همه جای پروژه
این کار وابستگی زیادی به Server ایجاد میکند.
بهتر است تا حد امکان از Storage API استفاده شود.
۲. عمومی کردن فایلهای خصوصی
قرار دادن مدارک و فایلهای حساس در Public Storage میتواند باعث دسترسی غیرمجاز شود.
۳. حذف نکردن فایل قبلی
هنگام تغییر تصویر محصول یا آواتار، اگر فایل قبلی دیگر استفاده نمیشود، باید برای حذف آن برنامه داشته باشیم.
۴. ذخیره مسیر فیزیکی در Database
ذخیره مسیرهایی مانند:
/home/user/project/storage/app/...
معمولاً معماری مناسبی نیست.
بهتر است مسیر نسبی فایل ذخیره شود.
۵. استفاده نکردن از Disk مناسب
همه فایلها نباید در یک محل ذخیره شوند.
فایلهای عمومی و خصوصی معمولاً نیازهای متفاوتی دارند.
# یک مثال کامل مدیریت تصویر محصول
فرض کنیم هنگام ایجاد محصول، تصویر آن را ذخیره میکنیم:
public function store(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'image' => 'required|image|max:2048',
]);
$path = $request->file('image')
->store('products', 'public');
Product::create([
'name' => $request->name,
'image' => $path,
]);
return back();
}
برای نمایش:
<img
src="{{ Storage::disk('public')->url($product->image) }}"
alt="{{ $product->name }}"
>
و هنگام حذف محصول:
Storage::disk('public')->delete($product->image);
این الگو یکی از سناریوهای رایج مدیریت تصاویر در پروژههای Laravel است.
# چکلیست مدیریت فایل در Laravel
قبل از پیادهسازی سیستم فایل، این موارد را بررسی کنید:
| مورد | وضعیت مناسب |
|---|---|
| Validation | انجام شود |
| تعیین نوع فایل | انجام شود |
| محدودیت حجم | تعیین شود |
| Disk | متناسب با نوع فایل انتخاب شود |
| فایل خصوصی | Public نباشد |
| Database | فقط اطلاعات لازم فایل را نگه دارد |
| نام فایل | کنترلشده باشد |
| حذف فایل قدیمی | در صورت نیاز انجام شود |
| Backup | برای فایلها در نظر گرفته شود |
| دسترسی | برای فایلهای خصوصی بررسی شود |
# جمعبندی
Storage یکی از بخشهای مهم Laravel برای ساخت برنامههایی است که با فایل سروکار دارند.
به جای اینکه در قسمتهای مختلف پروژه مستقیماً با مسیرهای فیزیکی سرور کار کنیم، میتوانیم از Filesystem و Storage Laravel استفاده کنیم.
مهمترین مفاهیمی که در این مقاله یاد گرفتیم عبارتاند از:
Filesystem
Disk
local
public
Storage Facade
storage:link
put
get
exists
delete
move
copy
url
path
download
همچنین یاد گرفتیم که فایلهای عمومی و خصوصی نباید به یک شکل مدیریت شوند و برای فایلهای حساس باید کنترل دسترسی در نظر گرفته شود.
در پروژههای بزرگتر نیز میتوان Storage را از سرور اصلی جدا کرد و از سرویسهای Object Storage استفاده کرد.
در نهایت یک معماری رایج برای بسیاری از پروژههای Laravel این است:
User
↓
Upload
↓
Validation
↓
Storage
↓
File
↓
File Path → Database
این ساختار ساده، قابل توسعه و مناسب بسیاری از پروژههای واقعی است.
سوالات متداول
Storage در Laravel چیست؟
Storage سیستم مدیریت فایل Laravel است که امکان ذخیره، دریافت، حذف، جابهجایی و مدیریت فایلها را با استفاده از Filesystem فراهم میکند.
Disk در Laravel چیست؟
Disk مشخص میکند عملیات فایل روی کدام نوع یا محل ذخیرهسازی انجام شود.
دستور storage:link چه کاری انجام میدهد؟
این دستور لینک لازم برای دسترسی عمومی به فایلهای Disk public را ایجاد میکند.
php artisan storage:link
تفاوت local و public در Laravel چیست؟
local معمولاً برای فایلهایی مناسب است که نباید مستقیماً عمومی باشند؛ در حالی که public برای فایلهایی که نیاز به دسترسی عمومی دارند استفاده میشود.
چگونه فایل را در Laravel حذف کنیم؟
Storage::delete('example.txt');
یا با Disk مشخص:
Storage::disk('public')->delete('example.txt');
چگونه URL یک فایل را دریافت کنیم؟
Storage::disk('public')->url(
'products/example.jpg'
);
چگونه فایل را از Laravel دانلود کنیم؟
return Storage::download(
'documents/example.pdf'
);
آیا باید فایل را داخل Database ذخیره کنیم؟
معمولاً خیر. بهتر است فایل در Storage ذخیره شود و مسیر یا اطلاعات موردنیاز آن در Database قرار گیرد.
آیا میتوان Storage را به فضای ذخیرهسازی خارجی متصل کرد؟
بله. Filesystem Laravel برای کار با Storageهای مختلف طراحی شده است و در پروژههای بزرگ میتوان از Object Storage نیز استفاده کرد.





