c# - FileResult ব্যবহার করে Asp.Net MVC এ যে কোনও ধরনের ফাইল ডাউনলোড করুন?




asp.net-mvc-2 (5)

GetFile ফাইল বন্ধ করা উচিত (অথবা একটি ব্যবহার মধ্যে এটি খোলার)। তারপরে আপনি বাইটগুলিতে রূপান্তর করার পরে ফাইলটি মুছতে পারেন - ডাউনলোডটি বাইট বাফারে সম্পন্ন হবে।

    byte[] GetFile(string s)
    {
        byte[] data;
        using (System.IO.FileStream fs = System.IO.File.OpenRead(s))
        {
            data = new byte[fs.Length];
            int br = fs.Read(data, 0, data.Length);
            if (br != fs.Length)
                throw new System.IO.IOException(s);
        }
        return data;
    }

সুতরাং আপনার ডাউনলোড পদ্ধতিতে ...

        byte[] fileBytes = GetFile(file);
        // delete the file after conversion to bytes
        System.IO.File.Delete(file);
        // have the file download dialog only display the base name of the file            return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, Path.GetFileName(file));

আমি এটা প্রস্তাব করেছি যে ব্যবহারকারীরা আমার Asp.Net এমভিসি অ্যাপ্লিকেশন থেকে ফাইলগুলি ডাউনলোড করতে অনুমতি দেওয়ার জন্য FileResult ব্যবহার করতে হবে। কিন্তু এইগুলির কেবলমাত্র উদাহরণগুলি আমি সবসময় ইমেজ ফাইলগুলির সাথে করতে পারি (বিষয়বস্তু টাইপ চিত্র / jpeg নির্দিষ্ট করে)।

কিন্তু যদি আমি ফাইল টাইপ জানি না? আমি ব্যবহারকারীদের আমার সাইটের ফাইলেরিয়া থেকে বেশিরভাগ ফাইল ডাউনলোড করতে সক্ষম হতে চাই।

আমি এটি করার একটি পদ্ধতি পড়লাম (কোডটির আগের পোস্টটি দেখুন), যা আসলেই ভাল কাজ করে, এক জিনিস ছাড়া: ফাইলের নাম যা সংরক্ষণ করুন ডায়ালগে আসে তা আন্ডারস্কোরের সাথে ফাইল পাথ থেকে সংগৃহীত হয় ( folder_folder_file.ext)। এছাড়াও, মনে হয় লোকেরা মনে করে যে আমি এই কাস্টম ক্লাসটি ব্যবহার করার পরিবর্তে একটি FileResult ফিরিয়ে দিতে পারি যা আমি বাইনারি কনন্টেন্টসেল্টটি খুঁজে পেয়েছি।

কেউ এমভিসি এ ডাউনলোড করার "সঠিক" উপায় জানেন?

সম্পাদনা করুন: আমি উত্তরটি পেয়েছি (নীচের), তবে শুধুমাত্র অন্য কারো আগ্রহ থাকলে আমি সম্পূর্ণ কাজ কোডটি পোস্ট করা উচিত:

public ActionResult Download(string filePath, string fileName)
{
    string fullName = Path.Combine(GetBaseDir(), filePath, fileName);

    byte[] fileBytes = GetFile(fullName);
    return File(
        fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}

byte[] GetFile(string s)
{
    System.IO.FileStream fs = System.IO.File.OpenRead(s);
    byte[] data = new byte[fs.Length];
    int br = fs.Read(data, 0, data.Length);
    if (br != fs.Length)
        throw new System.IO.IOException(s);
    return data;
}

আপনি জেনেরিক অক্টেট-স্ট্রিম MIME টাইপটি নির্দিষ্ট করতে পারেন:

public FileResult Download()
{
    byte[] fileBytes = System.IO.File.ReadAllBytes(@"c:\folder\myfile.ext");
    string fileName = "myfile.ext";
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}

এমভিসি কাঠামো এই নেটিভ সমর্থিত। System.Web.MVC.Controller.File নিয়ামক name / stream / array একটি ফাইল ফেরত পদ্ধতি প্রদান করে।

উদাহরণস্বরূপ ফাইলের ভার্চুয়াল পাথ ব্যবহার করে আপনি নিম্নলিখিতটি করতে পারেন।

return File(virtualFilePath, System.Net.Mime.MediaTypeNames.Application.Octet,  Path.GetFileName(virtualFilePath));

তার সহজ শুধু ডিরেক্টরির মধ্যে আপনার শারীরিক পাথ দিতে ফাইল নাম দিয়ে

public FilePathResult GetFileFromDisk(string fileName)
{
    return File(directoryPath, "multipart/form-data", fileName);
}

ইয়ান হেনরিকে ধন্যবাদ!

যদি আপনি এমএস এসকিউএল সার্ভার থেকে ফাইল পেতে প্রয়োজন হয় সমাধান এখানে।

public FileResult DownloadDocument(string id)
        {
            if (!string.IsNullOrEmpty(id))
            {
                try
                {
                    var fileId = Guid.Parse(id);

                    var myFile = AppModel.MyFiles.SingleOrDefault(x => x.Id == fileId);

                    if (myFile != null)
                    {
                        byte[] fileBytes = myFile.FileData;
                        return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, myFile.FileName);
                    }
                }
                catch
                {
                }
            }

            return null;
        }

যেখানে AppModel EntityFramework মডেল এবং EntityFramework আপনার ডাটাবেসের মধ্যে টেবিল উপস্থাপন করে। ফাইলডটা মাইফাইলস টেবিলের ভার্বিনারী varbinary(MAX)





asp.net-mvc-2