#P1723
RESOURCE /v2/media
Media Management (File Storage)
این ماژول وظیفه مدیریت فایلها و رسانههای سیستم را بر عهده دارد.
برخلاف ذخیرهسازی محلی، این کنترلر مستقیماً با فضای ذخیرهسازی ابری (Liara Object Storage) در ارتباط است. فایلها بر اساس نوع، شعبه، سال و ماه در پوشهبندیهای منظم ذخیره شده و متادیتای آنها (شامل سایز، مسیر و ارتباط با سایر موجودیتها) در دیتابیس نگهداری میشود.
1. Upload File (Store)
URL:
/v2/mediaMethod: POST
Controller: MediaController@store
Content-Type: multipart/form-data
Body Parameters
| Field | Type | Description |
|---|---|---|
| file | File | (الزامی) فایل باینری جهت آپلود (تصویر، سند و...). |
| branch | integer | (الزامی) شناسه شعبه (جهت ساختار پوشهبندی). |
| type | string | (الزامی) نوع فایل (مثلاً `slider`, `avatar`, `document`) که نام پوشه اصلی را تعیین میکند. |
| path | string | (اختیاری) پیشوند مسیر ذخیرهسازی. اگر ارسال نشود، پیشفرض uploads در نظر گرفته میشود. |
| related_id | integer | (اختیاری) شناسه رکورد مرتبط (مثلاً ID هتل یا مقاله). |
| related_category | string | (اختیاری) دستهبندی رکورد مرتبط (مثلاً `articles`). |
| operator | object | (تزریق سیستمی) آبجکت اپراتور (از طریق میدلور Auth) برای ثبت در فیلد operator_id. |
Upload Logic Details
- دریافت و آمادهسازی فایل:
- استخراج پسوند (Extension) و نام اصلی فایل.
- نام فایل در دیتابیس بدون پسوند ذخیره میشود.
- ساخت مسیر ذخیرهسازی (Path Generation):
مسیر فایل به صورت دینامیک بر اساس تاریخ جاری و ورودیها ساخته میشود:{base_path}/{branch}/{type}/{Year}/{Month}/{ext}/- اگر پارامتر
pathارسال شود، به عنوانbase_pathاستفاده میشود. - در غیر این صورت،
uploadsبه عنوان پیشفرض قرار میگیرد.
- اگر پارامتر
- ذخیرهسازی فیزیکی (Liara Disk):
- استفاده از
Storage::disk('liara')->putFileAs(...). - فایل با نام اصلی + پسوند در مسیر ساخته شده آپلود میشود.
- سپس سایز واقعی فایل آپلود شده از دیسک ابری استعلام میشود (
size()).
- استفاده از
- ثبت در دیتابیس:
- رکورد جدید با اطلاعات کامل (شامل مسیر کامل
path، سایز، نوع و ارتباطات) در جدولmediaایجاد میشود.
- رکورد جدید با اطلاعات کامل (شامل مسیر کامل
Flowchart (Upload Process)
Start Request
↓
Extract File info
(Ext, Name)
(Ext, Name)
↓
Has Custom Path?
Yes
Base = $request->path
No
Base = 'uploads'
↓
Generate Path Structure
base/branch/type/Y/m/ext/
base/branch/type/Y/m/ext/
↓
Liara Storage Upload
putFileAs() & get Size()
putFileAs() & get Size()
↓
Create DB Record & Return
2. List Media (Index)
URL:
/v2/mediaMethod: GET
Controller: MediaController@index
لیست فایلهای آپلود شده به صورت صفحهبندی شده (۱۵ تایی).
فیلترهای جستجو (Query Params)
operator_id: شناسه آپلود کننده.related_id: شناسه رکورد مرتبط.related_category: دستهبندی مرتبط.type: نوع فایل.branch: شعبه.status: وضعیت فایل.sortById: اگر ارسال شود (true)، مرتبسازی نزولی (جدیدترینها) اعمال میشود.
3. Update Media Status
URL:
/v2/media/{id}Method: PUT/PATCH
Controller: MediaController@update
توجه: در متد آپدیت، فایل فیزیکی یا مسیر آن تغییر نمیکند. تنها میتوان وضعیت (Status) فایل را تغییر داد.
{
"status": 0 // غیرفعال کردن فایل
}
4. Delete Media
URL:
/v2/media/{id}Method: DELETE
Controller: MediaController@destroy
عملیات حذف دومرحلهای:
- ابتدا با استفاده از مسیر ذخیره شده در دیتابیس (`path`)، فایل فیزیکی از دیسک Liara حذف میشود (`Storage::disk('liara')->delete`).
- سپس رکورد از دیتابیس پاک میشود.