اعتبارسنجی نوع فایل در سمت کلاینت با Custom Validation در ASP.NET MVC

اعتبارسنجي فايل سمت کلاينت در mvc
اعتبارسنجي فايل سمت کلاينت در ASP.NET MVC

با عرض سلام خدمت تمامی علاقمندان و همراهان مباحث آموزشی طراحی سایت با ASP.NET MVC ، در این جلسه آموزشی قصد داریم تا شما رو با نحوه اعتبارسنجی نوع فایل در سمت کلاینت با Custom Validation آشنا نماییم پس با ما همراه باشید .

اعتبارسنجی نوع فایل با در سمت Client با Custom Validation

ابتدا یک پروژه از نوع MVC  ایجاد کنید سپس یک class به پروژه خود اضافه نمایید برای این منظور بر روی پروژه خود راست کلیک کرده و سپس پس از انتخاب گزینه add بر روی Class کلیک نمایید حال نام این کلاس را FileTypeAttribute قرار دهید البته شما می توانید هر نام دلخواهی که می‌خواهید برای این کلاس انتخاب کنید. سپس کدهای زیر را درون کلاس FileTypeAttribute کپی نمایید.

کلاس FileTypeAttribute از دو کلاس ValidationAttribute و IClientValidatable ارث بری می کند ، کلاس IClientValidatable به منظور اعتبارسنجی فایل در سمت Client استفاده شده است.

سازنده ی کلاس FileTypeAttribute فرمت های قابل قبول فایل را که با علامت ” , ”  از هم جدا شده اند را به عنوان پارامتر ورودی دریافت می‌کند. و متد IsValid یک فایل را به عنوان پارامتر ورودی دریافت نموده و سپس فرمت این فایل را با فرمت های قابل قبول مطابقت می دهد و درصورتی که فرمت فایل با فرمت های قابل قبول ورودی مطابقت نداشت یک پیام خطا بر می گرداند.

کدهای مربوط به کلاس FileTypeAttribute

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace FileUploadValidation.CustomValidation
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class FileTypeAttribute : ValidationAttribute, IClientValidatable
    {
        private const string _DefaultErrorMessage = "Only the following file types are allowed: {0}";
        private IEnumerable<string> _ValidTypes { get; set; }

        public FileTypeAttribute(string validTypes)
        {
            _ValidTypes = validTypes.Split(',').Select(s => s.Trim().ToLower());
            ErrorMessage = string.Format(_DefaultErrorMessage, string.Join(" or ", _ValidTypes));
        }

        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            IEnumerable<HttpPostedFileBase> files = value as IEnumerable<HttpPostedFileBase>;
            if (files != null)
            {
                foreach (HttpPostedFileBase file in files)
                {
                    if (file != null && !_ValidTypes.Any(e => file.FileName.EndsWith(e)))
                    {
                        return new ValidationResult(ErrorMessageString);
                    }
                }
            }
            return ValidationResult.Success;
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                ValidationType = "filetype",
                ErrorMessage = ErrorMessageString
            };
            rule.ValidationParameters.Add("validtypes", string.Join(",", _ValidTypes));
            yield return rule;
        }
    }
}

حال بر روی پوشه Scripts در پروژه خود راست کلیک کرده و یک فایل جاوا اسکریپت به نام  ایجاد FileType.js نمایید و سپس کدهای زیر را که جهت اعتبارسنجی نوع فایل در سمت کلاینت نوشته شده است درون آن فایل کپی کنید.

کدهای مربوط به فایل FileType.js

$.validator.unobtrusive.adapters.add('filetype', ['validtypes'], function (options) {
    options.rules['filetype'] = { validtypes: options.params.validtypes.split(',') };
    options.messages['filetype'] = options.message;
});

$.validator.addMethod("filetype", function (value, element, param) {
    for (var i = 0; i < element.files.length; i++) {
        var extension = getFileExtension(element.files[0].name);
        if ($.inArray(extension, param.validtypes) === -1) {
            return false;
        }
    }
    return true;
});

function getFileExtension(fileName) {
    if (/[.]/.exec(fileName)) {
        return /[^.]+$/.exec(fileName)[0].toLowerCase();
    }
    return null;
}

حال فقط کافی است که در Model و یا ViewModel خود ویژگی [ ()FileType ] را به پراپرتی فایل که از نوع HttpPostedFileBase است  اضافه نمایید توجه داشته باشید که اتربیت FileType فرمت های قابل قبول برای فایل را به عنوان ورودی می پذیرد و درصورتی که فرمت فایل آپلود شده با فرمت های وارد شده در اتریبیت FileType مطابقت نداشت یک پیام خطا به کاربر نمایش می شود .

کدهای مربوط به ViewModel

public class MyViewModel
    {   
        [FileType("JPG,JPEG,PNG")] // فرمت های قابل قبول فایل
        public HttpPostedFileBase Photo { get; set; }
    }

 

حال یک View ایجاد نموده و کدهای زیر را در آن بنویسید و سپس پروژه خود را اجرا نمایید. توجه داشته باشید که حتما باید فایل  FileType.js را در View فراخوانی کنید.

کدهای مربوط به View

@model FileUploadValidation.Models.ViewModel.MyViewModel

@{
    ViewBag.Title = "Home Page";
}


@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.Photo, new { type = "file" })
    @Html.ValidationMessageFor(m => m.Photo,null, new { id = "validationTxt" })
    <input type="submit" value="upload" />
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/Scripts/FileType.js")
}

به پایان این جلسه آموزشی رسیدیم امیدوارم که مطالب این مقاله آموزشی برای شما عزیزان مفید واقع  شده باشد درصورتی در اتباط با این مقاله سوالی داشتید حتما در نظرات سایت میزفا مطرح کنید.

 

 

فیلم آموزشی asp.net core 2

آرزو ابراهیمی
بیش از 6 سال است که زمینه طراحی و توسعه سایت فعالیت می‌کنم، طراح و برنامه نویس انواع سامانه‌های تخصصی پزشکی، مناقصات، فروشگاهی و … بودم و هستم و هدفم در سایت میزفا ارائه اطلاعات بروز و ناب در زمینه طراحی سایت است. تا از این طریق بتونم تجربیات و دانسته های خودم را با تمامی علاقمندان به مباحث طراحی سایت به اشتراک بزارم .

فیلم آموزشی asp.net core 2

2 نظر

2 پاسخ

  1. اگه ایمیل یا شماره تماسی از خانم آرزو ابراهیمی در اختیارم بگذارید ممنون میشم

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

حداکثر حجم فایل برای آپلود: 1 مگابایت. فایل‌های مجاز برای آپلود: عکس, ویس, ویدیو, ورد یا پی دی اف, فایل متنی, زیپ. شما می‌تونید برای بهتر پرسیدن سوالتون، عکس یا ویس یا حتی فیلم در بخش نظرات میزفا آپلود کنید. برای ضبط ویس می‌تونید از خود واتس آپ استفاده کنید و بعد اینجا آپلود کنید و برای ارسال عکس هم کافی هست اسکرین شات بگیرید. Drop file here

با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

عضویت در خبرنامه هفتگی برای دریافت:

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
فیلم آموزشی asp.net core 2
ترک میزفا خوب نیست!
معرفی جامع‌ترین ابزار سئو در ایران
بالای ۱۰ هزار عضو
PHZpZGVvIHdpZHRoPSI2MDAiIGhlaWdodD0iMzUwIiBwb3N0ZXI9Imh0dHBzOi8vbWl6ZmEuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvcG9zdGVyLW1pemZhLXRvb2xzLXZpZGVvLW1pbi5wbmciIGNvbnRyb2xzIHByZWxvYWQ9Im5vbmUiPiANCiAgIDxzb3VyY2Ugc3JjPSJodHRwczovL21pemZhLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA1L21pemZhX3Rvb2xzXzcyMHAubXA0IiB0eXBlPSJ2aWRlby9tcDQiPg0KPC92aWRlbz4=