<ইনপুট টাইপ = "ফাইল" /> এর জন্য এইচটিএমএল সহায়ক


124

HTMLHelperফাইল আপলোডের জন্য কি কোনও আছে ? বিশেষত, আমি একটি প্রতিস্থাপন খুঁজছি

<input type="file"/>

এএসপি.নেট এমভিসি এইচটিএমএল হেল্পার ব্যবহার করে।

বা, যদি আমি ব্যবহার করি

using (Html.BeginForm()) 

ফাইল আপলোডের জন্য এইচটিএমএল নিয়ন্ত্রণ কী?

উত্তর:


207

এইচটিএমএল আপলোড ফাইল এএসপি এমভিসি 3।

মডেল : ( লক্ষ্য করুন FileExtensionsAttribute MvcFutures পাওয়া যায় এটা ফাইল এক্সটেনশন ক্লায়েন্ট সাইড এবং সার্ভার প্রান্তের যাচাই হবে।। )

public class ViewModel
{
    [Required, Microsoft.Web.Mvc.FileExtensions(Extensions = "csv", 
             ErrorMessage = "Specify a CSV file. (Comma-separated values)")]
    public HttpPostedFileBase File { get; set; }
}

এইচটিএমএল ভিউ :

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new 
                                       { enctype = "multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.File, new { type = "file" })
    @Html.ValidationMessageFor(m => m.File)
}

নিয়ামক পদক্ষেপ :

[HttpPost]
public ActionResult Action(ViewModel model)
{
    if (ModelState.IsValid)
    {
        // Use your file here
        using (MemoryStream memoryStream = new MemoryStream())
        {
            model.File.InputStream.CopyTo(memoryStream);
        }
    }
}

এটি কোনও ফাইলের ইনপুট <input type="file" />, কেবল একটি পাঠ্য বাক্স রেন্ডার করে না
বেন

মাইক্রোসফ্ট.ওয়েব.এমভিসি.ফাইএল এক্সটেনশানগুলি এমভিসিটিকে রেড হিসাবে চিহ্নিত করা হয়েছে @ আমি কীভাবে এটি ঠিক করব?
পমস্টার

1
@ পোমি নোট করুন যে ফাইলএক্সটেনশনসঅ্যাট্রিবিউট এমভিসি ফিউচারে (এমভিসি 3 হিসাবে) উপলব্ধ। আপনি এখান থেকে উত্স ব্যবহার করতে পারেন: উত্স বা এটি। নেট ফ্রেমওয়ার্ক 4.5 এ উপলব্ধ, এমএসডিএন ডকুমেন্টেশন দেখুন
পলিয়াস জালিআডুওনিস

1
দুর্ভাগ্যক্রমে ফাইলএক্সটেনশন বৈশিষ্ট্যটি HTTPPostedFileBase ধরণের বৈশিষ্ট্যের সাথে কাজ করে বলে মনে হয় না, বরং এটি কেবল স্ট্রিং বলে মনে হয়। কমপক্ষে এটি কোনও বৈধ এক্সটেনশন হিসাবে পিডিএফকে গ্রহণ করে নি।
সার্জ সাগান

এটি একটি মান বৈশিষ্ট্য (মান = "") যুক্ত করবে যা বৈধ HTML5 হিসাবে বৈধ নয় valid ইনপুট ধরণের ফাইল এবং চিত্রের ক্ষেত্রে মানটি বৈধ নয়। আমি মানটির বৈশিষ্ট্য অপসারণের কোনও উপায় দেখতে পাচ্ছি না। এটি হার্ড-কোডেড বলে মনে হচ্ছে।
ড্যান ফ্রাইডম্যান

19

আপনি এটি ব্যবহার করতে পারেন:

@using (Html.BeginForm("Upload", "File", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    <p>
        <input type="file" id="fileUpload" name="fileUpload" size="23" />
    </p>
    <p>
        <input type="submit" value="Upload file" /></p> 
}

8

আমি কিছুক্ষণ আগে এই একই প্রশ্নটি পেয়েছিলাম এবং স্কট হ্যানসেলম্যানের একটি পোস্ট পেলাম:

টেস্ট এবং মোকস সহ এএসপি.এনইটি এমভিসি দিয়ে HTTP ফাইল আপলোড কার্যকর করা হচ্ছে Imp

আশাকরি এটা সাহায্য করবে.


ধন্যবাদ, তবে আমি বিশেষত (এইচটিএমএল.বেগিনফর্ম ()) ব্যবহার করে অন্য রূপগুলি ব্যবহার করে একটি বাস্তবায়ন খুঁজছি।
গ্র্যাভিটন

6

অথবা আপনি এটি সঠিকভাবে করতে পারেন:

আপনার এইচটিএমএল হেল্পার এক্সটেনশন শ্রেণিতে:

public static MvcHtmlString FileFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
    {
        return helper.FileFor(expression, null);
    }

public static MvcHtmlString FileFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
    {
        var builder = new TagBuilder("input");

        var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
        builder.GenerateId(id);
        builder.MergeAttribute("name", id);
        builder.MergeAttribute("type", "file");

        builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));

        // Render tag
        return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
    }

এই লাইন:

var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));

মডেলের অনন্য একটি আইডি উত্পন্ন করে, আপনি তালিকা এবং স্টাফগুলিতে জানেন। মডেল [0]। নাম ইত্যাদি।

মডেলটিতে সঠিক সম্পত্তি তৈরি করুন:

public HttpPostedFileBase NewFile { get; set; }

তারপরে আপনাকে নিশ্চিত করতে হবে যে আপনার ফর্মটি ফাইলগুলি প্রেরণ করবে:

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))

তারপরে এখানে আপনার সহায়ক:

@Html.FileFor(x => x.NewFile)

এই সমাধানটি আরও চোখের ক্যান্ডি, এবং আমাকে @ এইচটিএমএল সহায়ক সহায়ক পদ্ধতির সাথে সামঞ্জস্য রাখে।
ইয়াহুফুফি

4

পলিয়াস জালিয়াদুওনিসের উত্তরের উন্নত সংস্করণ:

বৈধতাটি সঠিকভাবে কাজ করার জন্য আমাকে মডেলটি পরিবর্তন করতে হয়েছিল:

public class ViewModel
{
      public HttpPostedFileBase File { get; set; }

        [Required(ErrorMessage="A header image is required"), FileExtensions(ErrorMessage = "Please upload an image file.")]
        public string FileName
        {
            get
            {
                if (File != null)
                    return File.FileName;
                else
                    return String.Empty;
            }
        }
}

এবং দেখুন:

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new 
                                       { enctype = "multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.File, new { type = "file" })
    @Html.ValidationMessageFor(m => m.FileName)
}

এটি প্রয়োজনীয় কারণ @ সেরজ সাগান কেবল ফাইলের সাহায্যে ফাইল এক্সটেনশন বৈশিষ্ট্য সম্পর্কে কী লিখেছেন।


আপনি এই উত্তরটি পলিয়াসের উত্তরে মার্জ করতে পারবেন না?
গ্রাভিটন

2

ব্যবহার করতে BeginForm, এটি ব্যবহারের উপায় এখানে:

 using(Html.BeginForm("uploadfiles", 
"home", FormMethod.POST, new Dictionary<string, object>(){{"type", "file"}})

2
প্রথমে আপনি উল্লেখ করেন কীভাবে কোনও ইনপুট উপাদান তৈরি করা যায়, এবং এখন আপনি কীভাবে কোনও ফর্ম উপাদান তৈরি করবেন সে সম্পর্কে কথা বলছেন? এটা কি সত্যিই আপনার উত্তর?
pupeno

0

এটিও কাজ করে:

মডেল:

public class ViewModel
{         
    public HttpPostedFileBase File{ get; set; }
}

দেখুন:

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new 
                                       { enctype = "multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.File, new { type = "file" })       
}

নিয়ামক পদক্ষেপ:

[HttpPost]
public ActionResult Action(ViewModel model)
{
    if (ModelState.IsValid)
    {
        var postedFile = Request.Files["File"];

       // now you can get and validate the file type:
        var isFileSupported= IsFileSupported(postedFile);

    }
}

public bool IsFileSupported(HttpPostedFileBase file)
            {
                var isSupported = false;

                switch (file.ContentType)
                {

                    case ("image/gif"):
                        isSupported = true;
                        break;

                    case ("image/jpeg"):
                        isSupported = true;
                        break;

                    case ("image/png"):
                        isSupported = true;
                        break;


                    case ("audio/mp3"):  
                        isSupported = true;
                        break;

                    case ("audio/wav"):  
                        isSupported = true;
                        break;                                 
                }

                return isSupported;
            }

বিষয়বস্তুর তালিকা


-2

এটি আমার অনুমানের তুলনায় একটু হ্যাকি, তবে এটি কার্যকর বৈধতা বৈশিষ্ট্য ইত্যাদির ফলে প্রয়োগ হয়

@Html.Raw(Html.TextBoxFor(m => m.File).ToHtmlString().Replace("type=\"text\"", "type=\"file\""))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.