এএসপি.এনইটি এমভিসিতে একটি ফাইল দেখুন / ডাউনলোডে ফিরছেন


304

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

যদি আমি কোনও ফাইল বলে মনে করি SomeRandomFile.bakএবং এই ধরণের ফাইলগুলি খুলতে ব্রাউজারের কোনও সম্পর্কিত প্রোগ্রাম না থাকে তবে ডাউনলোড আচরণের সাথে এটি ডিফল্ট হয়ে গেলে আমার কোনও সমস্যা নেই। তবে, যদি আমি কোনও ফাইল বলা বাছাই করতে চাই SomeRandomFile.pdfবা SomeRandomFile.jpgআমি ফাইলটি কেবল খোলার চাই। তবে আমি ডাউনলোডের লিঙ্কটি পাশাপাশি রাখতে চাই যাতে ফাইল ডাউনলোডের ধরণের নির্বিশেষে আমি কোনও ডাউনলোড প্রম্পটকে বাধ্য করতে পারি। এটা কোনো কিছু হলো?

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

এগুলি আমি এ পর্যন্ত যা চেষ্টা করেছি তার উদাহরণ।

//Gives me a download prompt.
return File(document.Data, document.ContentType, document.Name);

//Opens if it is a known extension type, downloads otherwise (download has bogus name and missing extension)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType);

//Gives me a download prompt (lose the ability to open by default if known type)
return new FileStreamResult(new MemoryStream(document.Data), document.ContentType) {FileDownloadName = document.Name};

কোন পরামর্শ?


আপডেট: এই প্রশ্নগুলি অনেক লোকের সাথে জড়বস্তু বলে মনে হচ্ছে, তাই আমি ভেবেছিলাম একটি আপডেট পোস্ট করব। আন্তর্জাতিক চরিত্রগুলি সম্পর্কে ওসকার যে নীচের স্বীকৃত উত্তরের উপর সতর্কবার্তাটি সম্পূর্ণভাবে বৈধ এবং আমি ContentDispositionক্লাসটি ব্যবহারের কারণে কয়েকবার এটিকে আঘাত করেছি । আমি ঠিক করার পরে আমার বাস্তবায়ন আপডেট করেছি। নীচের কোডটি আমার একটি এএসপি.নেট কোর (পূর্ণ ফ্রেমওয়ার্ক) অ্যাপ্লিকেশনটিতে আমার সাম্প্রতিকতম অবতারের থেকে হলেও, আমি System.Net.Http.Headers.ContentDispositionHeaderValueক্লাসটি ব্যবহার করছি বলে এটি পুরানো এমভিসি অ্যাপ্লিকেশনটিতে ন্যূনতম পরিবর্তনগুলি সহ কাজ করা উচিত ।

using System.Net.Http.Headers;

public IActionResult Download()
{
    Document document = ... //Obtain document from database context

    //"attachment" means always prompt the user to download
    //"inline" means let the browser try and handle it
    var cd = new ContentDispositionHeaderValue("attachment")
    {
        FileNameStar = document.FileName
    };
    Response.Headers.Add(HeaderNames.ContentDisposition, cd.ToString());

    return File(document.Data, document.ContentType);
}

// an entity class for the document in my database 
public class Document
{
    public string FileName { get; set; }
    public string ContentType { get; set; }
    public byte[] Data { get; set; }
    //Other properties left out for brevity
}

উত্তর:


430
public ActionResult Download()
{
    var document = ...
    var cd = new System.Net.Mime.ContentDisposition
    {
        // for example foo.bak
        FileName = document.FileName, 

        // always prompt the user for downloading, set to true if you want 
        // the browser to try to show the file inline
        Inline = false, 
    };
    Response.AppendHeader("Content-Disposition", cd.ToString());
    return File(document.Data, document.ContentType);
}

দ্রষ্টব্য: উপরের এই উদাহরণ কোডটি ফাইলের আন্তর্জাতিক অক্ষরের জন্য সঠিকভাবে অ্যাকাউন্ট করতে ব্যর্থ। সম্পর্কিত মানীকরণের জন্য আরএফসি 6266 দেখুন। আমি বিশ্বাস করি এএসপি. নেট এমভিসি এর File()পদ্ধতির সাম্প্রতিক সংস্করণগুলি এবং ContentDispositionHeaderValueক্লাসটি সঠিকভাবে এর জন্য অ্যাকাউন্ট করে। - ওসকার 2016-02-25


7
যদি আমি সঠিকভাবে স্মরণ করি তবে এতক্ষণ ফাইলের নামের শূন্যস্থান না থাকায় এটিকে উদ্ধৃত করা যেতে পারে (এটি অর্জনের জন্য আমি এইচটিটিপি ইউটিলিটি Uআরলএনকোড () মাধ্যমে চালিত)।
কীথ উইলিয়ামস

22
দ্রষ্টব্য: আপনি যদি এটি ব্যবহার করেন এবং সেট করে থাকেন তবে ফাইল-নামটি 3 য় প্যারাম হিসাবে নেওয়ার Inline = true3-প্যারাম ওভারলোডটি ব্যবহার করবেন না তা নিশ্চিত File()। এটি আইইতে কাজ করবে , তবে ক্রোম একটি সদৃশ শিরোনামের প্রতিবেদন করবে এবং চিত্রটি উপস্থাপন করতে অস্বীকার করবে।
ফলস

74
ভার ডকুমেন্ট = কি ধরণের?
টিটিটি

7
@ user1103990, এটি আপনার ডোমেন মডেল।
দারিন দিমিত্রভ

3
এমভিসি 5 ব্যবহার করে, সামগ্রী-প্রদর্শন শিরোনামের আর কোনও প্রয়োজন নেই, কারণ এটি ইতিমধ্যে প্রতিক্রিয়া শিরোনামের একটি অংশ। তবে আমি কেবল এফএফ-তে একটি ডাউনলোড ডায়লগ পেয়েছি, ক্রোম এবং
কিংবদন্তি

124

"ডকুমেন্ট" ভেরিয়েবলটিতে কোনও প্রকার ইঙ্গিত না দেওয়ার কারণে আমি গৃহীত উত্তরটি নিয়ে সমস্যায় পড়েছিলাম: var document = ...সুতরাং আমি অন্য কারও সমস্যায় পড়তে চাইলে বিকল্প হিসাবে আমার পক্ষে কী কাজ করেছে তা পোস্ট করছি।

public ActionResult DownloadFile()
{
    string filename = "File.pdf";
    string filepath = AppDomain.CurrentDomain.BaseDirectory + "/Path/To/File/" + filename;
    byte[] filedata = System.IO.File.ReadAllBytes(filepath);
    string contentType = MimeMapping.GetMimeMapping(filepath);

    var cd = new System.Net.Mime.ContentDisposition
    {
        FileName = filename,
        Inline = true,
    };

    Response.AppendHeader("Content-Disposition", cd.ToString());

    return File(filedata, contentType);
}

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

1
এই ফাইলটি যখন US-ASCII এর বাইরে আন্তর্জাতিক অক্ষর ধারণ করে তখন এই সমাধানটি সঠিকভাবে কাজ করে না।
ওসকার বার্গগ্রেন

1
ধন্যবাদ, আমার দিন
বাঁচানো হয়েছে

1
এর বিকল্প AppDomain.CurrentDomain.BaseDirectoryহ'ল System.Web.HttpContext.Current.Server.MapPath("~")স্থানীয় মেশিনের তুলনায় এটি সত্যিকারের সার্ভারে আরও ভাল কাজ করতে পারে।
ক্রিস থম্পসন

15

দারিন দিমিত্রভের উত্তরটি সঠিক। কেবল একটি সংযোজন:

Response.AppendHeader("Content-Disposition", cd.ToString());আপনার প্রতিক্রিয়াটিতে ইতিমধ্যে একটি "বিষয়বস্তু-বিশৃঙ্খলা" শিরোনাম থাকলে ব্রাউজারটি ফাইলটি রেন্ডার করতে ব্যর্থ হতে পারে। সেক্ষেত্রে আপনি ব্যবহার করতে পারেন:

Response.Headers.Add("Content-Disposition", cd.ToString());

আমি দেখতে পেলাম যে pdfফাইলের জন্য বিষয়বস্তুর ধরণেরও প্রভাব রয়েছে, যদি আমি বিষয়বস্তুর ধরণটি সেট করি তবে System.Net.Mime.MediaTypeNames.Application.Octetএটি সেট করার পরেও ডাউনলোডকে বাধ্য করবে Inline = true, তবে যদি আমি সেট করি তবেResponse.ContentType = MimeMapping.GetMimeMapping(filePath) হলো, application/pdfতা সঠিকভাবে বরং ডাউনলোড চেয়ে খুলতে পারে
Yu ইয়াং জিয়ান

Response.Headers.Addআইআইএস সংহত পাইপলাইন মোড প্রয়োজন। সংযোজন, এমনকি অ্যাপ পুলটি সংহত হিসাবে সেট করা থাকলেও এটি ব্যতিক্রম ছুঁড়ে দেবে। সমাধান। ব্যবহার Response.AddHeader। এস থ্রেড দেখুন: স্ট্যাকওভারফ্লো.com
রোল্যান্ড

12

করার দেখতে ফাইল (উদাহরণস্বরূপ টেক্সট):

return File("~/TextFileInRootDir.txt", MediaTypeNames.Text.Plain);

করতে ডাউনলোড ফাইল (উদাহরণস্বরূপ টেক্সট):

return File("~/TextFileInRootDir.txt", MediaTypeNames.Text.Plain, "TextFile.txt");

দ্রষ্টব্য: ফাইল ডাউনলোড করতে আমাদের ফাইলডাউনলোড নাম যুক্তি পাস করা উচিত


এই পদ্ধতির সাথে একমাত্র সমস্যা হ'ল আপনি যদি কোনও ডাউনলোডের জন্য বাধ্যতামূলক পদ্ধতিটি ব্যবহার করেন তবে কেবলমাত্র ফাইলের নাম সরবরাহ করা হবে। ব্রাউজারটি ফাইলটি কীভাবে খুলতে হয় তা নির্ধারণ করতে চাইলে এটি আমাকে সঠিক ফাইলের নামটি প্রেরণ করতে দেয় না। সুতরাং বাহ্যিক অ্যাপ্লিকেশনটি আমার URL টি ফাইলের নাম হিসাবে ব্যবহার করার চেষ্টা করবে। যা সাধারণত ডাটাবেসে ডকুমেন্টের জন্য কোনও ধরণের আইডি হয়ে থাকবে, সাধারণত কোনও ফাইল এক্সটেনশান দিয়ে। এটি বেশ দরিদ্রের জন্য নামটি ফাইল অ্যাক্সেস করার জন্য ব্যবহৃত ইউআরএলের সাথে মেলে না, কারণ দৃশ্যাবলীটি হ'ল যদি আপনি সরবরাহ না করেন।
নিক অ্যালব্রেক্ট

Inlineকন্টেন্ট-ডিসপজিশনে সম্পত্তি ব্যবহার করা আমাকে ফাইলের নাম সেট করার ক্ষমতা ডাউনলোড থেকে জোর করা বা না করার আচরণ থেকে আলাদা করতে দেয়।
নিক অ্যালব্রেক্ট

4

আমি বিশ্বাস করি যে এই উত্তরটি পরিষ্কার, ( https://stackoverflow.com/a/3007668/550975 এর উপর ভিত্তি করে )

    public ActionResult GetAttachment(long id)
    {
        FileAttachment attachment;
        using (var db = new TheContext())
        {
            attachment = db.FileAttachments.FirstOrDefault(x => x.Id == id);
        }

        return File(attachment.FileData, "application/force-download", Path.GetFileName(attachment.FileName));
    }

9
প্রস্তাবিত নয়, বিষয়বস্তু-বিভাজন স্বচ্ছতা এবং সামঞ্জস্যতার জন্য পছন্দসই পদ্ধতি। stackoverflow.com/questions/10615797/…
নিক অ্যালব্র্যাচট

তার জন্য ধন্যবাদ. যদিও আমি মাইমে টাইপটি পরিবর্তিত করেছি application/octet-streamএবং এরপরেও ফাইলটি দেখানোর পরিবর্তে ডাউনলোড করা হয়েছে এবং এটি সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে।
সার্জ সাগান

1
বিষয়বস্তুর ধরণ সম্পর্কে মিথ্যা বলা সত্যিই খারাপ ধারণা বলে মনে হচ্ছে। কিছু ব্রাউজারগুলি "সংরক্ষণ করুন বা খোলা" কথোপকথনে ব্যবহারকারীর জন্য অ্যাপ্লিকেশনগুলি পরামর্শ দেওয়ার জন্য সঠিক সামগ্রীর ধরণের উপর নির্ভর করে।
ওসকার বার্গগ্রেন

যদি আপনার উদ্দেশ্য ব্রাউজারটি কোনও অ্যাপ্লিকেশনটির পরামর্শ দেয় তবে তা ঠিক আছে, তবে এই প্রশ্নটি বিশেষত ডাউনলোডটি বাধ্য করার বিষয়ে ...
Serj Sagan

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

3

ফাইল ভার্চুয়ালপথ -> গবেষণা \ গ্লোবাল অফিস রিভিউ.পিডিএফ

public virtual ActionResult GetFile()
{
    return File(FileVirtualPath, "application/force-download", Path.GetFileName(FileVirtualPath));
}

5
এটি পূর্বের উত্তরে ইতিমধ্যে উল্লিখিত ছিল এবং এটি প্রস্তাবিত নয়। কেন আরও তথ্যের জন্য নীচের প্রশ্নটি দেখুন। stackoverflow.com/questions/10615797/…
নিক অ্যালব্র্যাচট

1
এইভাবে এটি সার্ভারে মেমরিতে ফাইল লোড করে সার্ভারে সংস্থান ব্যবহার করে না, আমি কি সঠিক?
ইয়ান জোয়েট

1
আমি বিশ্বাস করি, আপনার ঠিক দরকার নেই ঠিক ক্র্যাশ ওভারাইড
হান্না

1

নীচে কোডটি একটি এপিআই পরিষেবা থেকে পিডিএফ ফাইল পাওয়ার জন্য এবং ব্রাউজারে এটির প্রতিক্রিয়া জানানোর জন্য কাজ করেছিল - আশা করি এটি সহায়তা করে;

public async Task<FileResult> PrintPdfStatements(string fileName)
    {
         var fileContent = await GetFileStreamAsync(fileName);
         var fileContentBytes = ((MemoryStream)fileContent).ToArray();
         return File(fileContentBytes, System.Net.Mime.MediaTypeNames.Application.Pdf);
    }

2
উত্তরের জন্য ধন্যবাদ. আমি যে অংশটি সমাধানের সন্ধান করছি সেখানে আপনি সেই অংশটি মিস করেছেন যা এতে ফাইলটির নাম উল্লেখ করার ক্ষমতা অন্তর্ভুক্ত। আপনি সবেমাত্র বাইট ফিরছেন, তাই URL থেকে নামটি অনুমান করা হবে। আমি উদাহরণ হিসাবে পিডিএফ ব্যবহার করছিলাম, তবে আমার ক্ষেত্রে এটি একাধিক অন্যান্য ফাইল প্রকারের জন্যও কাজ করা প্রয়োজন। আমি যে আপনার সমাধান এতক্ষণ আপনি .NET ফ্রেমওয়ার্ক 4.x ব্যবহার করছেন এবং MVC <= 5. আপনি .NET কোর বিরুদ্ধে চালিয়ে থাকেন, আপনার সেরা বাজি ব্যবহার করা কাজ করবে উল্লেখ করা উচিতMicrosoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider
নিক আলব্রেশট

@ নিক অ্যালব্র্যাচট আমি ব্যবহার করিনি N নেট কোর - উপরের উদাহরণটি একটি ব্রাউজারে পিডিএফ প্রতিক্রিয়ার জন্য। তবে আপনি যদি ডাউনলোডটি ডাউনলোড করতে চান: ফাইল (ফাইলকন্টেন্টবাইটস, সিস্টেম.নেট.মাইম.মিডিয়াটাইপনাম.অ্যাপলিকেশন.পিডিএফ, "আপনার ফাইলের নাম")। আপনার উত্তর পেয়ে গেলেও আমি নিশ্চিত নই। যদি এটি সাহায্য করে তবে আমাকে জানান। নেট কোর পরামর্শ দেওয়ার জন্য ধন্যবাদ। এছাড়াও আপনি যদি আমার উত্তরটি দরকারী মনে করেন তবে একটি ভোট যোগ করুন add
জনি বয়

আমি গ্রহণযোগ্য হিসাবে চিহ্নিত করেছি এমন উত্তর দিয়ে আমি ইতিমধ্যে সমস্যার সমাধান করেছি। আপনি যদি তাদেরকে দরকারী বলে মনে করেন তবে আমি আরও কয়েকটি সতর্কতামূলক বিষয়গুলি নির্দেশ করছিলাম। আমার মূল প্রশ্নটি ছিল ২০১১, সুতরাং এটি এখনই বেশ তারিখের।
নিক অ্যালব্রেক্ট

@ নিক অ্যালব্র্যাচট আপনাকে ধন্যবাদ আপনি এটি সমাধান করেছেন তা সম্পর্কে আমি সচেতন ছিলাম না, আমি দেখতে পেয়েছি এটি একটি খুব পুরানো পোস্ট। অ্যাসিঙ্ক সম্পর্কিত কিছু উত্তর খুঁজতে গিয়ে আমি এই ফোরামটি পেয়েছি, অ্যাসিঙ্ক প্রক্রিয়াগুলিতে আমি নতুন। আমি আমার সমস্যা সমাধান করতে সক্ষম হলাম তাই ভাগ করে নেওয়া। আপনার সময়ের জন্য আপনাকে চেয়ে
জনি বয়

0

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

[Route("api/[controller]")]
public class DownloadController : Controller
{
    [HttpGet]
    public async Task<IActionResult> Download()
    {
        var path = @"C:\Vetrivel\winforms.png";
        var memory = new MemoryStream();
        using (var stream = new FileStream(path, FileMode.Open))
        {
            await stream.CopyToAsync(memory);
        }
        memory.Position = 0;
        var ext = Path.GetExtension(path).ToLowerInvariant();
        return File(memory, GetMimeTypes()[ext], Path.GetFileName(path));
    }

    private Dictionary<string, string> GetMimeTypes()
    {
        return new Dictionary<string, string>
        {
            {".txt", "text/plain"},
            {".pdf", "application/pdf"},
            {".doc", "application/vnd.ms-word"},
            {".docx", "application/vnd.ms-word"},
            {".png", "image/png"},
            {".jpg", "image/jpeg"},
            ...
        };
    }
}

এটি আপনার নিজের দ্বারা প্রকাশ না করে আপনি যেমন (যেমন একটি লাইব্রেরি, সরঞ্জাম, পণ্য, টিউটোরিয়াল, বা ওয়েবসাইট) এর সাথে যুক্ত তার সাথে লিঙ্ক করা স্ট্যাক ওভারফ্লোতে স্প্যাম হিসাবে বিবেচিত। দেখুন: "ভাল" স্ব প্রচারের কী বোঝায়? , স্ব-প্রচার সম্পর্কে কিছু টিপস এবং পরামর্শ , স্ট্যাক ওভারফ্লোর জন্য "স্প্যাম" এর সঠিক সংজ্ঞা কী? , এবং কি কিছু স্প্যাম করে তোলে
স্যামুয়েল লিউ

0

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

সুতরাং, লেখার সময়, আপনি এমভিসি নিয়ামককে ফাইল ডাউনলোডের অংশটি পরিচালনা করতে এম্বেড না করে ভ্যানিলা ব্লেজার / রেজার ব্যবহার করে এটি অর্জন করতে পারবেন না যার উদাহরণ নীচে রয়েছে:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Net.Http.Headers;

[Route("api/[controller]")]
[ApiController]
public class FileHandlingController : ControllerBase
{
    [HttpGet]
    public FileContentResult Download(int attachmentId)
    {
        TaskAttachment taskFile = null;

        if (attachmentId > 0)
        {
            // taskFile = <your code to get the file>
            // which assumes it's an object with relevant properties as required below

            if (taskFile != null)
            {
                var cd = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
                {
                    FileNameStar = taskFile.Filename
                };

                Response.Headers.Add(HeaderNames.ContentDisposition, cd.ToString());
            }
        }

        return new FileContentResult(taskFile?.FileData, taskFile?.FileContentType);
    }
}

এরপরে, নিশ্চিত হয়ে নিন যে আপনার অ্যাপ্লিকেশন স্টার্টআপ (স্টার্টআপ.সি) সঠিকভাবে এমভিসি ব্যবহারের জন্য কনফিগার করা হয়েছে এবং নিম্নলিখিত লাইনটি উপস্থিত রয়েছে (এটি না থাকলে এটি যুক্ত করুন):

        services.AddMvc();

.. এবং তারপরে অবশেষে আপনার উপাদানটিকে নিয়ামকের সাথে লিঙ্ক করতে সংশোধন করুন, উদাহরণস্বরূপ (একটি কাস্টম ক্লাস ব্যবহার করে পুনরাবৃত্ত ভিত্তিক উদাহরণ):

    <tbody>
        @foreach (var attachment in yourAttachments)
        {
        <tr>
            <td><a href="api/FileHandling?attachmentId=@attachment.TaskAttachmentId" target="_blank">@attachment.Filename</a> </td>
            <td>@attachment.CreatedUser</td>
            <td>@attachment.Created?.ToString("dd MMM yyyy")</td>
            <td><ul><li class="oi oi-circle-x delete-attachment"></li></ul></td>
        </tr>
        }
        </tbody>

আশা করি এটি ব্ল্যাজরের রাজ্যে এই আপাতদৃষ্টিতে সাধারণ প্রশ্নের উপযুক্ত উত্তর পেতে যারা (আমার মতো!) লড়াই করেছেন তাদের সহায়তা করবে ...!


আপনার যেমন একই সমস্যার মুখোমুখি হওয়ার জন্য এটি অন্যদের পক্ষে উপকারী হতে পারে, আপনি যদি নিজের শিরোনাম দিয়ে নিজের প্রশ্ন পোস্ট করেন যা এটি ব্লাজারের কাছে অনন্য বলে চিহ্নিত করে, নিজেই উত্তর দিন এবং এখানে একটি মন্তব্য যুক্ত করুন যাতে কারও কাছে পৌঁছানোর পরামর্শ দেওয়া হয় ব্লেজার সম্পর্কিত সমস্যাযুক্ত এই প্রশ্নটি আপনার লিঙ্কটি দেখুন। আমি অনুভব করেছি যে আমি এএসপি.এনইটি এমভিসির হয়েও এই আসল প্রশ্নটি পৌঁছেছি এবং এর উত্তরটিকে এএসপি.নেট কোরের সাথে প্রাসঙ্গিক করে তুলছি। ব্লেজার সম্পূর্ণরূপে সম্পূর্ণ ভিন্ন প্রাণী, যেমন আপনি আবিষ্কার করেছেন।
নিক অ্যালব্রেক্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.