در سازمان‌ها و شرکت‌های امروزی، وابستگی به فضاهای ذخیره‌سازی عمومی خارجی (نظیر گوگل درایو یا دراپ‌باکس) همواره ریسک‌های جدی امنیت داده، عدم انطباق با قوانین محرمانگی، کندی سرعت شبکه و هزینه‌های مداوم ارزی را به همراه دارد. سامانه File Manager (مرکز مدیریت فایل و درایو ابری سازمانی) با هدف ارائه یک راهکار On-Premise / Private Cloud Storage کاملاً امن، بومی، پرسرعت و مستقل از سرویس‌های خارجی طراحی و پیاده‌سازی شده است.

💡 چشم‌انداز محصول و نیازمندی‌های بنیادین

کاربران سازمانی نیازمند محیطی شبیه به Google Drive یا Nextcloud هستند که بتوانند در آن پوشه‌بندی کنند، فایل‌های چند گیگابایتی را بدون نگرانی از قطعی اینترنت آپلود نمایند، محتوای فایل‌های فشرده (ZIP/RAR) را بدون دانلود بازبینی کنند، لینک‌های اشتراک امن مدت‌دار بسازند و سهمیه دیسک خود را مدیریت نمایند. سامانه File Manager تمامی این قابلیت‌ها را در یک قالب یکپارچه راست‌چین مدرن گرد هم آورده است.


بخش اول: قابلیت‌ها و امکانات سامانه

پیش از ورود به عمق معماری، در این بخش مروری کاربرمحور بر آنچه File Manager واقعاً برای کاربر سازمانی و مدیر سیستم فراهم می‌کند خواهیم داشت.

۱.۱ فضای ابری اختصاصی و کاوشگر فایل /

کاوشگر سلسله‌مراتبی فایل و پوشه با ناوبری Breadcrumb، ساخت پوشه، تغییر نام، جابه‌جایی، کپی و حذف، مرتب‌سازی جدول بر اساس نام/حجم/پسوند/تاریخ، جستجوی بلادرنگ در پوشه جاری، و پیش‌نمایش درون‌مرورگری (Inline Preview) برای تصویر، ویدیو، صوت و اسناد متنی بدون نیاز به دانلود.

۱.۲ آپلود تکه‌ای فایل‌های حجیم

آپلود فایل‌های چند گیگابایتی به‌صورت قطعه‌قطعه با پروتکل مقاوم در برابر قطعی شبکه؛ نوار پیشرفت با درصد، سرعت انتقال، زمان باقیمانده و قابلیت لغو/توقف. جزئیات فنی این مکانیزم در بخش دوم (۲.۳) آمده است.

۱.۳ کاوشگر و استخراج فایل‌های فشرده

مشاهده ساختار درختی درون فایل‌های ZIP، RAR، 7Z و TAR بدون دانلود یا اکسترکت روی سیستم کاربر، و استخراج جزئی یا کامل مستقیم در هر پوشه دلخواه روی فضای ابری.

۱.۴ دانلود مستقیم از لینک اینترنتی

دریافت فایل از لینک HTTP/HTTPS مستقیماً توسط سرور، بدون مصرف اینترنت کاربر؛ اعتبارسنجی حجم و رزرو سهمیه پیش از شروع، و نمایش زنده وضعیت در صف پردازش پس‌زمینه.

۱.۵ اشتراک‌گذاری پیشرفته و پایش سهمیه

  • اشتراک درون‌سازمانی: واگذاری دسترسی فایل/پوشه به سایر کاربران با سطوح فقط‌مشاهده، فقط‌آپلود، فقط‌حذف یا دسترسی کامل.
  • لینک امن عمومی: تولید لینک دانلود با تاریخ انقضا، رمز عبور و سقف تعداد دفعات دانلود؛ همراه با پورتال اختصاصی /SharedFolder برای افراد مجاز.
  • پایش سهمیه دیسک: نوار بصری نمایش حجم مصرف‌شده، حجم کل و فضای باقیمانده.

۱.۶ احراز هویت و امنیت حساب کاربری

ورود، ثبت‌نام و خروج امن با کوکی‌های HttpOnly و قفل خودکار حساب پس از تلاش‌های ناموفق پیاپی (Brute-Force Protection) — جزئیات فنی در بخش دوم (۲.۸).

۱.۷ پنل مدیریت ادمین /Admin

داشبورد مرکزی وضعیت سیستم و ابزار مدیریت کاربران، سهمیه‌ها و دسترسی‌ها:

  • داشبورد وضعیت (/Admin): مصرف کل فضای ذخیره‌سازی، تعداد کاربران، نقش‌ها و فایل‌های سرور.
  • مدیریت کاربران (/Admin/Users): ایجاد کاربر، انتساب نقش، تغییر رمز عبور، وضعیت فعال/قفل و تعیین سقف دیسک اختصاصی یا فضای نامحدود.
  • مدیریت نقش‌ها (/Admin/Roles): تعریف نقش و سهمیه دیسک پیش‌فرض هر نقش.
  • ماتریس دسترسی‌ها (/Admin/Permissions): کنترل دقیق مجوزها بر پایه سیستم Granular Permissions.

۱.۸ چندزبانگی و بومی‌سازی RTL

پشتیبانی کامل راست‌چین با استایل اختصاصی bootstrap.rtl.css و دیزاین سیستم Metronic RTL، فونت استاندارد فارسی IRANSans در تمام بخش‌ها، و رابط کاربری کاملاً فارسی در پیام‌ها، مودال‌ها و جداول.

۱.۹ وضعیت فعلی پروژه — شفاف و بدون اغراق

✅ تکمیل و آماده استفاده
  • آپلود چانک بدون محدودیت حجم فایل
  • مدیریت کامل پوشه و فایل (CRUD)
  • استخراج و مشاهده آرشیو ZIP/RAR
  • دانلود ریموت با صف پس‌زمینه
  • اشتراک‌گذاری درون‌سازمانی و لینک امن
  • پنل ادمین کامل با مدیریت سهمیه
🚧 محدودیت‌های شناخته‌شده
  • فاقد صف پیام‌رسانی توزیع‌شده (مثل RabbitMQ) — دانلودهای پس‌زمینه در پروسه اصلی وب اجرا می‌شوند
  • پیش‌نمایش فایل‌های آفیس (DOCX/XLSX) هنوز پیاده‌سازی نشده

بخش دوم: عمق فنی و معماری

برای علاقه‌مندان به مهندسی نرم‌افزار، در ادامه تصمیمات معماری، ساختار لایه‌بندی و چالش‌های حل‌شده در File Manager را مرور می‌کنیم.

۲.۱ ساختار Solution و تفکیک دغدغه‌ها

پروژه بر اساس متدولوژی Clean Architecture و بدون وابستگی به فریم‌ورک‌های سنگین سازمانی پیاده‌سازی شده است:

  • Application/Abstractions — اینترفیس‌های سرویس (IFileManagerService, IArchiveService, IRemoteDownloadService, IStorageQuotaService, ISecurityService, IUserManagementService) و ریپازیتوری‌ها.
  • Domain/Models — مدل‌های مستقل از دیتابیس (FileItem, ArchiveBrowserItem, DownloadJobSnapshot, WorkspaceQuotaStatus, UserItemShareRecord, SecureFileLinkRecord).
  • Domain/Security — ثابت‌های دسترسی و نقش (AppPermissions, UserRoles).
  • Infrastructure/Persistence — معماری دوگانه ذخیره‌سازی (SQL با EF Core، و JSON فایل‌محور مستقل از دیتابیس).
  • Infrastructure/Services — پیاده‌سازی سرویس‌های تخصصی (چانک، آرشیو، دانلود ریموت، سهمیه).
  • Pages و Presentation — صفحات Razor بخش کاربری/ادمین و اندپوینت‌های دانلود مستقیم.

۲.۲ ایزولاسیون فضای ذخیره‌سازی و امنیت فراتر از وب‌روت (TrustFolder)

یکی از شایع‌ترین خطاهای امنیتی در سیستم‌های آپلود فایل، ذخیره‌سازی مستقیم فایل‌ها درون پوشه وب‌سرور (wwwroot) است که راه را برای اجرای شل‌های مخرب (Web Shell) یا دور زدن احراز هویت از طریق URL باز می‌گذارد. در معماری این پروژه:

  • عدم دسترسی مستقیم از وب (Zero Direct Access): تمام فایل‌ها در مسیر ایزوله ./App_Data/TrustFolder/UsersFiles/{Username} خارج از وب‌روت قرار دارند.
  • جلوگیری از حملات نفوذ دایرکتوری (Path Traversal Protection): تمام مسیرها توسط متد NormalizeRelativePath فیلتر و اعتبارسنجی می‌شوند.
  • دانلود کنترل‌شده با توکن و مجوز: هر بار دانلود از طریق پایپ‌لاین نرم‌افزاری C# و پس از ارزیابی مالکیت، سهمیه و وضعیت اشتراک صورت می‌پذیرد.

۲.۳ مهندسی آپلود چندمرحله‌ای و پایدار فایل‌های حجیم (Chunk Upload)

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

Chunk Pipeline مکانیزم تکه‌تکه کردن در کلاینت و سرور

در سمت فرانت‌اند، اسکریپت پیشرفته upload.js (حدود ۲,۰۰۰ خط کد) فایل کاربر را به قطعات کوچک با سایز استاندارد تقسیم می‌کند (Byte Slicing). هر قطعه به همراه شناسه یکتای آپلود و ایندکس چانک ارسال می‌گردد. سرور قطعات را در یک پوشه موقت ذخیره کرده و پس از دریافت آخرین چانک، تمام قطعات را به شکل ترتیبی و با صحت‌سنجی کامل در فایل نهایی اسمبل (Reassemble) می‌کند.

۲.۴ کاوشگر و استخراج استریمینگ آرشیوهای فشرده (Archive Engine)

یکی از امکانات منحصربه‌فرد سامانه، ماژول ArchiveService مبتنی بر کتابخانه قدرتمند SharpCompress است:

  • مرور بدون اکسترکت (Virtual Archive Browsing): کاربر می‌تواند درون فایل‌های فشرده ZIP، RAR، 7Z و TAR را مانند یک پوشه عادی مرور کند، بدون اینکه نیازی به اکسترکت کردن روی سرور یا مصرف RAM بالا باشد.
  • استخراج مستقیم در سرور (Server-Side Extraction): کاربر می‌تواند کل فایل یا تنها یک پوشه خاص از فایل فشرده را مستقیماً در فضای ابری خود استخراج کند.

۲.۵ دانلود راه دور مستقیم از وب با رزرو سهمیه (Remote URL Downloader)

سرویس RemoteDownloadService این امکان را به کاربران می‌دهد که تنها با وارد کردن یک لینک دانلود مستقیم اینترنتی (HTTP/HTTPS)، انتقال فایل را به سرور بسپارند:

رزرو پیش‌دستانه سهمیه دیسک

پیش از شروع دانلود، سیستم با ارسال درخواست HEAD حجم فایل را از سرور مبدأ استعلام کرده و سهمیه دیسک کاربر را رزرو می‌کند تا مانع سوءاستفاده یا پر شدن دیسک سرور شود.

پردازش ناهمگام در پس‌زمینه (Async Queue)

عملیات دانلود در یک ترد پس‌زمینه غیرمسدودکننده با ثبت لحظه‌ای سرعت، درصد پیشرفت و حجم دریافتی انجام می‌شود؛ پیاده‌سازی‌شده با ConcurrentDictionary برای مدیریت صف هم‌زمان.

۲.۶ سیستم اشتراک‌گذاری پیشرفته (درون‌سازمانی و لینک‌های امن عمومی)

سامانه از دو کانال اشتراک مجزا و کاملاً ساختاریافته پشتیبانی می‌کند:

  1. اشتراک مستقیم کاربر به کاربر (Internal Sharing): امکان واگذاری دسترسی پوشه یا فایل به همکاران در سازمان با ۴ سطح دسترسی granular: فقط مشاهده، فقط آپلود، فقط حذف و دسترسی کامل.
  2. لینک‌های امن زمان‌دار (Secure Public Links): تولید پیوندهای مدت‌دار رمزنگاری‌شده با تعیین تاریخ انقضا، رمز عبور اختیاری و سقف مجاز دفعات دانلود.

۲.۷ معماری پایگاه‌داده دوگانه (Dual-Persistence Architecture)

یکی از هوشمندانه‌ترین تصمیمات معماری در این سیستم، جداسازی کامل مخزن ذخیره‌سازی متادیتا از طریق الگوهای Repository است:

  • مد رلشنال (SQL Server / SQLite): برای استقرارهای بزرگ سازمانی و بارهای کاری پرحجم با استفاده از EF Core.
  • مد مستقل از دیتابیس (JSON Persistence): برای استقرارهای سبک، پرتابل یا سرورهای بدون دیتابیس؛ تمامی موجودیت‌ها بدون افت قابلیت در فایل‌های JSON ساختاریافته مدیریت می‌شوند.
  • سوئیچ بدون تغییر کد: تغییر مکانیزم تنها با تنظیم مقدار DatabaseProvider:Type در appsettings.json اتفاق می‌افتد.

۲.۸ سرویس‌های کلیدی لایه اپلیکیشن

FileManagerService

هسته مدیریت فایل‌سیستم سرور؛ ایزوله‌سازی دسترسی کاربران و نرمال‌سازی مسیرها.

ArchiveService

خواندن آرشیوها به‌صورت استریم با SharpCompress بدون لود کامل در RAM.

RemoteDownloadService

دانلود هم‌زمان پس‌زمینه با ConcurrentDictionary و درخواست‌های غیرمسدودکننده.

StorageQuotaService

EnsureUploadFits و ReserveRemoteDownload فضای خالی کاربر را پیش از عملیات راستی‌آزمایی می‌کنند.

SecurityService

هش امن رمز عبور با الگوریتم PBKDF2 (PasswordHasher<T>)، اعمال سیاست پیچیدگی رمز و قفل خودکار حساب پس از ۵ تلاش ناموفق.

۲.۹ چالش‌های فنی حل‌شده

قطعی اینترنت در آپلود فایل‌های چند گیگابایتی

راه‌حل: تقسیم فایل به چانک‌های کوچک‌تر، آپلود مستقل هر قطعه و اسمبل کردن قطعی در سمت سرور با پاکسازی خودکار قطعات ناتمام.

خواندن محتوای فایل‌های فشرده بزرگ در رم سرور

راه‌حل: استفاده از استریمینگ لایه پایین در SharpCompress که امکان پیمایش محتویات فایل زیپ/رار را بدون اکسترکت کردن روی دیسک یا بارگذاری کامل در RAM فراهم می‌کند.

۲.۱۰ پشته فناوری کامل

C# 13 / .NET 10 ASP.NET Core Razor Pages SQL Server / SQLite EF Core 10 JSON Persistence SharpCompress 0.50.4 ASP.NET Core Identity Metronic RTL Bootstrap 5 RTL jQuery 3.7.1 FontAwesome / KeenIcons

جمع‌بندی دستاوردهای مهندسی

  • امنیت به‌عنوان اصل طراحی: ذخیره‌سازی خارج از وب‌روت و کنترل کامل مسیر در برابر Path Traversal.
  • مهندسی شبکه مقاوم: آپلود چانک و دانلود ریموت هر دو در برابر قطعی و خطای شبکه پایدارند.
  • مدیریت حافظه هوشمند: پردازش استریم‌محور آرشیوها بدون فشار به RAM سرور.
  • انعطاف استقرار: سوئیچ بدون تغییر کد بین SQL Server، SQLite و ذخیره‌سازی JSON.
  • رابط کاربری حرفه‌ای: پنل ادمین با تم مترونیک، بومی‌سازی کامل فارسی و تجربه کاربری روان.

بررسی سورس‌کد و معماری در گیت‌هاب

کدبیس تمیز، سرویس‌ها و مستندات پروژه FileUploader بر روی گیت‌هاب در دسترس قرار دارد:

مشاهده مخزن FileUploader در گیت‌هاب