پرش به مطلب اصلی

File Picker

کامپوننت x-file-picker یک ورودی پیشرفته برای انتخاب و آپلود فایل در فرم‌ها است که امکانات متنوعی مانند انتخاب چندگانه، محدودیت نوع و حجم فایل، پیش‌نمایش تصویر/ویدیو، قابلیت حذف و جایگزینی فایل، کنترل فقط‌خواندنی، شخصی‌سازی ظاهر و ... را ارائه می‌دهد.


ویژگی‌ها

  • پشتیبانی از انتخاب یک یا چند فایل (multiple)
  • تعیین پسوندهای مجاز و غیرمجاز (allowedExtensions, disallowedExtensions)
  • محدودیت حجم فایل (حداقل و حداکثر) (minSize, maxSize)
  • محدودیت تعداد فایل انتخابی (minSelection, maxSelection)
  • پیش‌نمایش تصویر و ویدیو و نمایش آیکن برای سایر فرمت‌ها
  • قابلیت حذف و جایگزینی فایل (دکمه‌های حذف و جایگزین)
  • قابلیت فقط‌خواندنی (readonly)
  • امکان تغییر نام فایل هنگام آپلود (allowRename)
  • شخصی‌سازی تعداد ستون پیش‌نمایش (cols) و کلاس کانتینر پیش‌نمایش (previewContainerClass)
  • کنترل نمایش دکمه پاک‌کردن (clearable)
  • کنترل نمایش پاپ‌آپ پیش‌نمایش و تصویر بندانگشتی (showPreviewPopup, showPreviewThumbnail)
  • تعیین حداکثر طول نام فایل (fileNameMaxLength)
  • شخصی‌سازی کلاس‌های CSS برای خود و کانتینر
  • نمایش پیام راهنما هنگام غیرفعال بودن (disabledTooltip)
  • پشتیبانی از پیام راهنما (hint)
  • پشتیبانی از لیبل و فضای رزرو لیبل (label, labelSpaceReserved)
  • کنترل نمایش پیام‌های منطقی (suppressLogicMessages)
  • استایل و نوع پیام پیش‌فرض (messageStyle, defaultMessageType)
  • تعیین ارتفاع و جهت ناحیه آپلود (uploadZoneHeight, uploadZoneOrientation)

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

نام پراپنوع دادهمقدار پیش‌فرضتوضیحات
namestringنام فیلد (اجباری)
labelstringnullلیبل اصلی
labelSpaceReservedboolfalseآیا فضای لیبل حتی بدون مقدار رزرو شود؟
idstringnullشناسه یکتا برای ورودی
classstringnullکلاس CSS سفارشی برای خود ورودی
containerClassstringnullکلاس CSS سفارشی برای کانتینر
multipleboolfalseامکان انتخاب چند فایل
allowedExtensionsstringnullپسوندهای مجاز (مثال: "jpg,png,mp4")
disallowedExtensionsstringnullپسوندهای غیرمجاز (مثال: "exe,php")
minSizeintnullحداقل حجم فایل (کیلوبایت)
maxSizeintnullحداکثر حجم فایل (کیلوبایت)
minSelectionintnullحداقل تعداد فایل انتخابی
maxSelectionintnullحداکثر تعداد فایل انتخابی
defaultMessagestringnullپیام پیش‌فرض برای نمایش
messageStylestring/enum"message"استایل نمایش پیام (message, tooltip, ...)
defaultMessageTypestring/enum"info"نوع پیام پیش‌فرض (info, error, success, ...)
hintstringnullپیام راهنما یا توضیح کوتاه
suppressLogicMessagesboolfalseعدم نمایش پیام‌های منطقی
colsintnullتعداد ستون پیش‌نمایش فایل‌ها
requiredboolfalseاجباری بودن فیلد
previewContainerClassstringnullکلاس سفارشی برای کانتینر پیش‌نمایش فایل‌ها
valuearray,object,int,string,nullnullمقدار اولیه (آیدی یا آرایه آیدی فایل‌ها)
clearablebooltrueامکان پاک‌کردن فایل انتخاب‌شده
readonlyboolfalseفقط‌خواندنی بودن ورودی
allowRenameboolfalseامکان تغییر نام فایل هنگام آپلود
fileNameMaxLengthint255حداکثر طول نام فایل
disabledboolfalseغیرفعال بودن ورودی
disabledTooltipstringnullپیام راهنما هنگام غیرفعال بودن ورودی
showPreviewPopupboolfalseنمایش پاپ‌آپ پیش‌نمایش فایل
previewModeenumfancyboxنوع پیش نمایش پاپ‌آپ (fancybox یا modal)
showPreviewThumbnailboolfalseنمایش تصویر بندانگشتی فایل
uploadZoneHeightstringnullارتفاع ناحیه آپلود (مثال: "120px")
uploadZoneOrientationstring"horizontal"جهت ناحیه آپلود (horizontal یا vertical)
deleteTooltipTextstringnullمتن راهنمای حذف فایل
replaceTooltipTextstringnullمتن راهنمای جایگزینی فایل
disableReplaceboolfalseغیر فعال کردن امکان جایگزینی فایل
disableDeleteboolfalseغیر فعال کردن امکان حذف فایل

رویداد سفارشی change

با توجه به ساختار پیاده‌سازی شده برای کامپوننت x-file-picker، رویداد جداگانه‌ای برای اطلاع از تغییرات فایل‌ها در کامپوننت فراهم شده است که می‌توانید به صورت زیر از آن استفاده کنید.

$("#file-picker").on("file-picker:change", function (e, data) {
console.log(data); // شامل فایل‌های انتخاب شده
});

مقداردهی با جاوااسکریپت

برای مقداردهی یا تغییر مقدار کامپوننت x-file-picker به صورت داینامیک با جاوااسکریپت، می‌توانید از متد زیر استفاده کنید:

// مقداردهی با یک فایل
filePickerInstance.setValue({
key: "file-key",
name: "filename.pdf",
src: "https://example.com/file.pdf",
size: 120000,
extension: "pdf",
});

// مقداردهی با چند فایل
filePickerInstance.setValue([
{
key: "file-key-1",
name: "image1.jpg",
src: "https://example.com/image1.jpg",
size: 50000,
extension: "jpg",
},
{
key: "file-key-2",
name: "video1.mp4",
src: "https://example.com/video1.mp4",
size: 2000000,
extension: "mp4",
},
]);
  • مقدار ورودی می‌تواند یک شیء فایل یا آرایه‌ای از فایل‌ها باشد.
  • هر فایل باید شامل کلیدهای key, name, و src باشد و می‌تواند size و extension نیز داشته باشد.
هشدار

در صورتی که مقداردهی پراپ src به وسیله یک آدرس اینترنتی (url) انجام شود، برخی امکانات نظیر حذف یا ویرایش تصویر به درستی عمل نخواهند کرد. توصیه می‌شود برای عملکرد کاملِ کامپوننت، مقدار src را به صورت آیدی یا مدل فایل تنظیم کنید.

توجه

برای initialize کردن کامپوننت با مقادیر جدید میتوان به شکل زیر عمل کرد.

const filePickerElement = $('#slectorId');

const pickerInstance = filePickerElement.getInstance();

pickerInstance?.resetValue();

filePickerElement.data({
'allowed-extensions': allowed_extensions,
'max-size': max_size
})

initializeFilePicker("#slectorId");

pickerInstance?.updateHelper({max_size, allowed_extensions});

مثال‌ها

نمونه پایه

<x-file-picker
name="documents_multiple"
label="انتخاب فایل (چندتایی)"
showPreviewPopup
showPreviewThumbnail
:multiple="true"
:value="[4, 2, 114, 113]"
:clearable="true"
/>

<x-file-picker
name="documents"
label="انتخاب فایل"
showPreviewPopup
showPreviewThumbnail
allowed-extensions="zip,exe,pdf"
disallowed-extensions="exe"
:allowRename="true"
:file-name-max-length="50"
>
<x-slot:label-suffix-slot>
<a href="#">استعلام</a>
</x-slot:label-suffix-slot>
</x-file-picker>