এমভিসি 4 রেজার ফাইল আপলোড


249

আমি এমভিসি 4 তে নতুন এবং আমি আমার ওয়েবসাইটে ফাইল আপলোড নিয়ন্ত্রণ প্রয়োগ করার চেষ্টা করছি। আমি ভুলটি খুঁজে পাচ্ছি না I আমি আমার ফাইলটিতে একটি নাল মান পাচ্ছি।

নিয়ন্ত্রক:

public class UploadController : BaseController
    {
        public ActionResult UploadDocument()
        {
            return View();
        }

       [HttpPost]
       public ActionResult Upload(HttpPostedFileBase file)
       {
           if (file != null && file.ContentLength > 0)
           {
               var fileName = Path.GetFileName(file.FileName);
               var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
               file.SaveAs(path);
           }

           return RedirectToAction("UploadDocument");
        }
    }

দেখুন:

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


1
আপনাকে কেবল সর্বজনীন অ্যাক্সেসাল্ট আপলোড (এইচটিটিপিপোস্টডফাইলেবেস ফাইল) পরিবর্তন করতে হবে <ইনপুট টাইপ = "ফাইল" নাম = "ফাইলআপলোড" />
হাফিজ আসাদ

আমার বাস্তবায়ন এখানে চেক stackoverflow.com/a/40990080/4251431
বশীর আল MOMANI

2
হাতছাড়া enctypeফর্মে আমাকে একটি ঘন্টা খরচ
স্যাভেজ

আপলোড () পদ্ধতি এবং বোতামের মধ্যে সংযোগ কোথায় রয়েছে। সেখানে অনক্লিক ইভেন্ট হওয়া উচিত? আমি এএসপনেটে নতুন
pnizzle

উত্তর:


333

Uploadপদ্ধতি এর HttpPostedFileBaseপ্যারামিটার হিসাবে একই নামে থাকতে হবে file input

সুতরাং শুধু এই ইনপুট পরিবর্তন করুন:

<input type="file" name="file" />

এছাড়াও, আপনি এতে ফাইলগুলি খুঁজে পেতে পারেন Request.Files:

[HttpPost]
public ActionResult Upload()
{
     if (Request.Files.Count > 0)
     {
         var file = Request.Files[0];

         if (file != null && file.ContentLength > 0)
         {
            var fileName = Path.GetFileName(file.FileName);
            var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
            file.SaveAs(path);
         }
     }

     return RedirectToAction("UploadDocument");
 }

2
সংগ্রহের Index out of boundsকোনও ফাইল না থাকলে ব্যতিক্রম হয়ে যাবে না Request.Files..?
শাশ্বত

2
আসলে এটি নিক্ষেপ করবে ArgumentOutOfRangeException, তবে আপনার ঠিক আছে, আমি আপডেট করেছি
ক্রিসটি পুফু

2
মনে রাখবেন যে এইচটিএমএল.বেগিনফর্মের প্যারামিটারগুলি হ'ল ক্রিয়া নাম এবং নিয়ামকের নাম ('নিয়ন্ত্রণকারী' পোস্টফিক্স ছাড়াই instance উদাহরণস্বরূপ: হোমকন্ট্রোলারের পরিবর্তে হোম)। আর একটি গুরুত্বপূর্ণ বিষয় হ'ল <for>> ট্যাগটি ভিতরে অন্তর্ভুক্ত না করা, কারণ এই বিগনিফোর্মটি ট্যাগটি খোলে
পোকজোক

5
অন্য কথায় - আপনার ভিউ মডেলের সম্পত্তি নাম অবশ্যই ইনপুট টাইপের নামের সাথে মেলে। যদি আপনার viewmodelসম্পত্তির নামকরণ করা হয় AgentPhotoতবে আপনার অবশ্যই নিজের দৃষ্টিতে নিম্নলিখিতগুলি থাকতে হবে:<input type="file" name="AgentPhoto"/>
দিয়ান

var path = Path.Combine(Server.MapPath("~/Images/"), fileName);, ক্লাস "সার্ভার" পাওয়া যায় নি, কোন প্যাকেজ ব্যবহার করে?
ড্যানিলো পাডুয়া

65

এটি স্পষ্ট করা। মডেল:

public class ContactUsModel
{
    public string FirstName { get; set; }             
    public string LastName { get; set; }              
    public string Email { get; set; }                 
    public string Phone { get; set; }                 
    public HttpPostedFileBase attachment { get; set; }

পদক্ষেপ পোস্ট করুন

public virtual ActionResult ContactUs(ContactUsModel Model)
{
 if (Model.attachment.HasFile())
 {
   //save the file

   //Send it as an attachment 
    Attachment messageAttachment = new Attachment(Model.attachment.InputStream,       Model.attachment.FileName);
  }
}

অবশেষে hasFile চেক করার জন্য এক্সটেনশন পদ্ধতি

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

namespace AtlanticCMS.Web.Common
{
     public static class ExtensionMethods 
     {
         public static bool HasFile(this HttpPostedFileBase file)
         {
             return file != null && file.ContentLength > 0;
         }        
     }
 }

পাবলিক এইচটিটিপিপোস্টডফিলবেস সংযুক্তি {পান; সেট;
attach

আমি মনে করি কোলা সংযুক্তি ধরণের সংজ্ঞায়িত হচ্ছে না উল্লেখ করা হচ্ছে।
কারসন

2
2020367 ব্যবহারকারীর দ্বারা বর্ণিত হিসাবে দেখুন ব্যবহার করা যেতে পারে। প্রকৃতপক্ষে আমি এইচটিএমএল.বেগিনফর্ম অংশে নতুন {এনক্রিপ = "গুণিত / ফর্ম-ডেটা" include অন্তর্ভুক্ত করতে ভুলে গিয়েছিলাম, সুতরাং আমার ক্রিয়ায় ফাইলটি দেখতে অক্ষম। দুর্দান্ত উত্তর। মডেল শ্রেণি এবং সম্প্রসারণ পদ্ধতিতে দেখানোর জন্য +1।
অর্জুন

@ বিশ্বহান্না কীভাবে আমি আমার ফর্মটিতে সংযুক্তি রেখেছি। অন্যান্য মানগুলির জন্য রেজার আমাদের জন্য একটি সাধারণ বাক্যবিন্যাস সরবরাহ করে, তবে আমি কীভাবে এই ফাইলটির জন্য এটি করব?
ডেনিস ভি

1
হাই, @ ক্লিন্টএস্টউড, সেই পোস্টটি একটি ফাইল আপলোড করার জন্য ছিল, আমি অনলাইনে এমন কিছু সন্ধান করলাম যা একাধিক আপলোডের সাথে মেলে (আপনার জন্য) এবং আমি খুঁজে পেয়েছি যা আমার মনে হয় কাজ করবে work আবার, তার মডেল ভিত্তি করে যা "Request.Files" ব্যবহার করছে না stackoverflow.com/questions/36210413/...
Bishoy হানা

17

পৃষ্ঠা দেখুন

@using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" }))
 { 
   <input type="file" name="file" />
   <input type="submit" value="Upload" class="save" id="btnid" />
 }

স্ক্রিপ্ট ফাইল

$(document).on("click", "#btnid", function (event) {
        event.preventDefault();
        var fileOptions = {
            success: res,
            dataType: "json"
        }
        $("#formid").ajaxSubmit(fileOptions);
    });

নিয়ামক মধ্যে

    [HttpPost]
    public ActionResult UploadFile(HttpPostedFileBase file)
    {

    }

2
আমি @ মুফ্লিক্সের সাথে একমত, আপনার AJAXএখানে দরকার নেই। Html.BeginFormইতিমধ্যে কাজ করে। AJAX এর শুধুমাত্র যদি আপনার কাছে একটি পুনর্নির্দেশ করতে চাই না প্রয়োজন হয়<form action=LINK>
Jac

1
বড় আকারের ফাইলগুলির জন্য আজাক্স আরও ভাল কারণ এটি আপনাকে ব্যবহারকারীর অভিজ্ঞতা বাড়িয়ে তুলতে দেয়।
করুনহিজার্ড 1234

6

আপনাকে কেবল ফাইল করা ইনপুটটির নামটি পরিবর্তন করতে হবে কারণ প্যারামিটার এবং ইনপুট ফিল্ডের নামের ক্ষেত্রে একই নাম প্রয়োজন কেবল এই লাইনটি প্রতিস্থাপন করুন আপনার কোডটি ঠিকঠাক কাজ করছে

 <input type="file" name="file" />

2

আমি মনে করি, আরও ভাল উপায় হ'ল আপনার নিয়ামক বা এপিআইতে এইচটিপিপोस्টেড ফাইলবেস ব্যবহার করা । এর পরে আপনি আকার, টাইপ ইত্যাদি সনাক্ত করতে পারবেন simple

ফাইল বৈশিষ্ট্য আপনি এখানে দেখতে পারেন:

এমভিসি 3 কীভাবে চেক করবেন এটি এইচটিটিপিপসটেডফাইলেবেজ কোনও চিত্র

উদাহরণস্বরূপ ইমেজএপি:

[HttpPost]
[Route("api/image")]  
public ActionResult Index(HttpPostedFileBase file)  
{  
    if (file != null && file.ContentLength > 0)  
        try 
        {  
            string path = Path.Combine(Server.MapPath("~/Images"),  
               Path.GetFileName(file.FileName));

            file.SaveAs(path);  
            ViewBag.Message = "Your message for success";  
        }  
        catch (Exception ex)  
        {  
            ViewBag.Message = "ERROR:" + ex.Message.ToString();  
        }  
    else 
    {  
        ViewBag.Message = "Please select file";  
    }  
    return View();  
}

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


এর চেয়ে ভাল কি? ওপি ইতিমধ্যে ব্যবহার করছে HttpPostedFileBase
jpaugh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.