Laravel Storage Dedupler: فایل تکراری رو یه بار ذخیره کن
خلاصهٔ کاملتر
Laravel Storage Dedupler پکیجی از Khimusov Maxim هست که با هش SHA-1 (یعنی یه اثر انگشت یکتا از محتوای فایل) جلوی ذخیرهٔ فایل تکراری رو میگیره. فرض کن کاربرها یه سند رو برای چند پست آپلود میکنن؛ با این پکیج هر پست لینک پیوست خودشو داره ولی همه به یه فایل مشترک اشاره میکنن. نکته اینه که فقط فایلهایی که از طریق Dedupler ذخیره بشن شامل این کار میشن و نصبش رفتار متدهای storage خود لاراول رو عوض نمیکنه.
با facade Dedupler میشه فایل آپلودی، مسیر لوکال یا محتوای خام رو ذخیره کرد. پکیج اول محتوا رو هش میکنه و دنبال رکورد UniqueFile با همون هش میگرده. اگه پیدا کنه، همونو برمیگردونه، حتی اگه اسم فایل فرق داشته باشه. هش SHA-1 خودش کلید اصلی رکورده:
$first = Dedupler::storeFromContent($content, 'release-notes.txt');
$second = Dedupler::storeFromContent($content, 'notes-copy.txt');
$first->id === $second->id; // trueبرای آپلود از storeFromUploadedFile و برای فایلی که روی سرور هست از storeFromPath استفاده میشه. این متدها اگه منبع نامعتبر باشه یا ذخیرهسازی خطا بده null برمیگردونن، پس قبل از استفاده باید چکش کنی.
برای وصل کردن فایل به مدلهای Eloquent، trait Deduplable رو به مدل اضافه میکنی. بعد با storeUploadedFile فایل رو ذخیره میکنی و با attachUniqueFile همون فایل رو از روی هشش به یه مدل دیگه هم وصل میکنی، بدون آپلود دوباره. جدول پیوستها نوع و ID مدل رو نگه میداره، پس حتی کلاسهای مدل مختلف هم میتونن یه فایل مشترک داشته باشن.
با detachUniqueFile پیوست یه مدل رو برمیداری. تا وقتی مدل دیگهای به فایل وصله، فایل میمونه. ولی جدا کردن آخرین پیوست بهطور پیشفرض هم فایل و هم رکورد UniqueFile رو پاک میکنه. نویسنده تأکید میکنه اگه اپت باید اسناد رو بعد از حذف پیوست نگه داره، قبل از استفاده این رفتارو بررسی کن.
یه دستور dedupler:analyse-legacy هم هست که یه پوشهٔ قدیمی رو اسکن میکنه و تعداد فایلهای تکراری و تخمین فضای قابل صرفهجویی رو گزارش میده. این دستور فقط گزارش میده و هیچ فایلی رو جابهجا یا پاک نمیکنه.
نکات کلیدی:
- از PHP 8.2 به بالا و لاراول 10 تا 13 پشتیبانی میکنه
- دیسک پیشفرض deduplicated هست؛ یه دیسک لوکال خصوصی که تو storage/app/deduplicated قرار داره
- فایلهای تکراری قبلی روی دیسک خودبهخود حذف نمیشن
- جدا کردن آخرین پیوست، فایل اصلی رو هم پاک میکنه
- پکیج با لایسنس MIT منتشر شده




