এমভিসি 4 এ চিত্রগুলি আপলোড করা / প্রদর্শন করা হচ্ছে


84

সত্তা ফ্রেমওয়ার্ক ব্যবহার করে কোনও ডাটাবেস থেকে চিত্রগুলি কীভাবে আপলোড / প্রদর্শন করতে হয় সে সম্পর্কে ধাপে ধাপে টিউটোরিয়ালগুলি যে কেউ জানেন? আমি কোড স্নিপেটগুলি পরীক্ষা করে দেখেছি, তবে এটি কীভাবে কাজ করে তা সম্পর্কে এখনও আমি পরিষ্কার নই। আমার কোনও কোড নেই, কারণ আপলোড ফর্মটি লেখার বিষয়টি বাদ দিয়ে আমি হারিয়েছি। যে কোনও (এবং আমি কোনও মানে) সাহায্যের প্রশংসা করি।

একপাশে, কোনও বই কেন এই বিষয়টি কভার করে না? আমার কাছে প্রো এএসপি.নেট এমভিসি 4 এবং পেশাদার এমভিসি 4 রয়েছে এবং তারা এ সম্পর্কে কোনও উল্লেখ করে না।


6
আপনাকে অনুসরণ তাহলে এই প্রারম্ভিক আবরণ করেPro ASP MVC 4SportsStore Tutorialpage 292
Komengem

তুমি ঠিক বলছো. আমি খেয়ালও করিনি। এটি সম্পর্কে একটি অধ্যায় খুঁজছিলেন। ধন্যবাদ
রোজারথ্যাট

4
আমি জানি এটি এমভিসি 4 এর জন্য, তবে এমভিসি 5-র সন্ধান করার সময় এই প্রশ্নটি এখনও দেখাবে - - আমি একটি দুর্দান্ত টিউটোরিয়াল পেয়েছি যা এমভিসি 5-তে একটি ফাইল সার্ভারে আপলোড হিসাবে একটি ডেটাবেসে আপলোড উভয়কেই মাইকসডটনেটিং
Vahx

বইয়ের অধ্যায়টি ডাটাবেসে চিত্র আপলোড করার বিষয় অন্তর্ভুক্ত করে, যেখানে বেশিরভাগ লোকেরা ডাটাবেসের পথ এবং চিত্রটি কোনও ফোল্ডারে সংরক্ষণ করতে চায়।
ঝাঁটা

উত্তর:


144

নিম্নলিখিতটি দেখুন

@using (Html.BeginForm("FileUpload", "Home", FormMethod.Post, 
                            new { enctype = "multipart/form-data" }))
{  
    <label for="file">Upload Image:</label> 
    <input type="file" name="file" id="file" style="width: 100%;" /> 
    <input type="submit" value="Upload" class="submit" /> 
}

আপনার নিয়ামকের এমন ক্রিয়া পদ্ধতি থাকা উচিত যা গ্রহণ করবে HttpPostedFileBase;

 public ActionResult FileUpload(HttpPostedFileBase file)
    {
        if (file != null)
        {
            string pic = System.IO.Path.GetFileName(file.FileName);
            string path = System.IO.Path.Combine(
                                   Server.MapPath("~/images/profile"), pic); 
            // file is uploaded
            file.SaveAs(path);

            // save the image path path to the database or you can send image 
            // directly to database
            // in-case if you want to store byte[] ie. for DB
            using (MemoryStream ms = new MemoryStream()) 
            {
                 file.InputStream.CopyTo(ms);
                 byte[] array = ms.GetBuffer();
            }

        }
        // after successfully uploading redirect the user
        return RedirectToAction("actionname", "controller name");
    }

আপডেট 1

আপনি যদি অজস্রভাবে জিকুয়ারি ব্যবহার করে ফাইলগুলি আপলোড করতে চান তবে এই নিবন্ধটি চেষ্টা করুন ।

সার্ভারের দিকটি পরিচালনা করার কোডটি (একাধিক আপলোডের জন্য);

 try
    {
        HttpFileCollection hfc = HttpContext.Current.Request.Files;
        string path = "/content/files/contact/";

        for (int i = 0; i < hfc.Count; i++)
        {
            HttpPostedFile hpf = hfc[i];
            if (hpf.ContentLength > 0)
            {
                string fileName = "";
                if (Request.Browser.Browser == "IE")
                {
                    fileName = Path.GetFileName(hpf.FileName);
                }
                else
                {
                    fileName = hpf.FileName;
                }
                string fullPathWithFileName = path + fileName;
                hpf.SaveAs(Server.MapPath(fullPathWithFileName));
            }
        }

    }
    catch (Exception ex)
    {
        throw ex;
    }

এই নিয়ন্ত্রণটি চিত্রের নামও ফেরত দেয় (একটি জাভাস্ক্রিপ্ট কল পিছনে) যা তখন আপনি এটি ডিওমে চিত্র প্রদর্শন করতে ব্যবহার করতে পারেন।

আপডেট 2

বিকল্পভাবে, আপনি এমভিসি 4 এ এসিঙ্ক ফাইল আপলোডগুলি চেষ্টা করতে পারেন ।


কি দারুন. ধন্যবাদ আমি চেষ্টা করে দেখব। কোনও সংস্থান, যা আপনি ভাবতে পারেন, আমি এই বিষয়ে আমার জ্ঞানটি আরও পড়তে পারি? আমি কিছুই খুঁজে পাচ্ছি না।
রোজারথ্যাট

4
করার পরে file.SaveAs(path)আমি কীভাবে সেই পথ থেকে ফাইলটি মুছতে পারি?
J86

সার্ভার সাইডে এইচটিএমএল ফাইল টাইপ চিত্র প্রেরণ করতে কৌণিক জাল ব্যবহার করা আরও সহজ, stackoverflow.com/a/26409100/900284
ফ্র্যাঙ্ক মায়াট থু

@ ফ্র্যাঙ্কম্যাথ আপনি কি ছবি আপলোড করার জন্য কৌনিক ব্যবহার করছেন? কিছুটা কি অদ্ভুত লাগছে না?
ইদ্রিস খান

4
@ ডটনেটড্রেমার আমি আপনার ওয়েবসাইটটি তত্ক্ষণাত্ পরীক্ষা করে দেখছি কারণ সেখানে এই মুহুর্তে কিছু গুরুত্বপূর্ণ তথ্য উন্মুক্ত করার সময় লগ ইন করার ক্ষেত্রে ত্রুটি ছিল ...
গ্যারেথ

46

এখানে একটি সংক্ষিপ্ত টিউটোরিয়াল:

মডেল:

namespace ImageUploadApp.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Image
    {
        public int ID { get; set; }
        public string ImagePath { get; set; }
    }
}

দেখুন:

  1. সৃষ্টি:

    @model ImageUploadApp.Models.Image
    @{
        ViewBag.Title = "Create";
    }
    <h2>Create</h2>
    @using (Html.BeginForm("Create", "Image", null, FormMethod.Post, 
                                  new { enctype = "multipart/form-data" })) {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Image</legend>
            <div class="editor-label">
                @Html.LabelFor(model => model.ImagePath)
            </div>
            <div class="editor-field">
                <input id="ImagePath" title="Upload a product image" 
                                      type="file" name="file" />
            </div>
            <p><input type="submit" value="Create" /></p>
        </fieldset>
    }
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }
    
  2. সূচক (প্রদর্শনের জন্য):

    @model IEnumerable<ImageUploadApp.Models.Image>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.ImagePath)
            </th>
        </tr>
    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.ImagePath)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
                @Html.ActionLink("Details", "Details", new { id=item.ID }) |
                @Ajax.ActionLink("Delete", "Delete", new {id = item.ID} })
            </td>
        </tr>
    }
    
    </table>
    
  3. নিয়ামক (তৈরি করুন)

    public ActionResult Create(Image img, HttpPostedFileBase file)
    {
        if (ModelState.IsValid)
        {
            if (file != null)
            {
                file.SaveAs(HttpContext.Server.MapPath("~/Images/") 
                                                      + file.FileName);
                img.ImagePath = file.FileName;
            }  
            db.Image.Add(img);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(img);
    }
    

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


বাহ, এই জন্য আপনাকে অনেক ধন্যবাদ। আমি যদি ছবিটি জেপিগে সীমাবদ্ধ রাখতে চাই?
কালা জে

@ কালাজে আপনি যদি কেবলমাত্র জেপিজিতে আপলোড হওয়া চিত্রগুলিকে সীমাবদ্ধ রাখতে চান তবে আপনি স্বীকৃতিযুক্ত বৈশিষ্ট্যটি যুক্ত করতে পারেন (এইচটিএমটিএল 5 কেবল ক্রোম এবং এফ এফ নয়, আইই নয়) কাজ করে। অথবা আপনি নিয়ন্ত্রণকারীর filename.LastIndexOf(".")মতো এক্সটেনশনটি পরীক্ষা করতে পারেন। আশা করি এটি সহায়তা করে
জর্ডি ভ্যান আইজক

@ জর্দান ইভজ, আমি গ্রহণযোগ্য বৈশিষ্ট্যটি ব্যবহার করেছি তবে এটি কেবল ক্রোমে কাজ করে। এটি এফএফ বা আইই তে কাজ করে না। আমার বৈধতার অন্য কিছু রূপ দরকার।
কালা জে

4
@ কালাজে মাজেবে আপনি এইচটিএমএল 5 ফাইল এপি দিয়ে কিছু করতে পারেন আপনার যদি কিছু টিউটোরিয়াল প্রয়োজন হয় তা এখানে
জর্ডি ভ্যান ইজক

4
হ্যাকাররা সার্ভার-পাশের বৈধতা ছাড়াই দূষিত ফাইলগুলি আপলোড করতে সক্ষম হবে।
aराव6

-16
        <input type="file" id="picfile" name="picf" />
       <input type="text" id="txtName" style="width: 144px;" />
 $("#btncatsave").click(function () {
var Name = $("#txtName").val();
var formData = new FormData();
var totalFiles = document.getElementById("picfile").files.length;

                    var file = document.getElementById("picfile").files[0];
                    formData.append("FileUpload", file);
                    formData.append("Name", Name);

$.ajax({
                    type: "POST",
                    url: '/Category_Subcategory/Save_Category',
                    data: formData,
                    dataType: 'json',
                    contentType: false,
                    processData: false,
                    success: function (msg) {

                                 alert(msg);

                    },
                    error: function (error) {
                        alert("errror");
                    }
                });

});

 [HttpPost]
    public ActionResult Save_Category()
    {
      string Name=Request.Form[1]; 
      if (Request.Files.Count > 0)
        {
            HttpPostedFileBase file = Request.Files[0];
         }


    }

সুতরাং, আপনি ইমগ করার জন্য একটি চিত্র হিসাবে কীভাবে "msg" প্রদর্শন করবেন?
agগলই 22

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