ASP.Net এ ফাইল আপলোড এবং ডাউনলোড করার জন্য সহজ এবং কার্যকরী মেকানিজম রয়েছে। আপনি ASP.Net Web Forms বা ASP.Net MVC এর মাধ্যমে ফাইল আপলোড এবং ডাউনলোড পরিচালনা করতে পারেন। এই প্রক্রিয়ায়, ব্যবহারকারী একটি ফাইল আপলোড করলে এটি সার্ভারে সংরক্ষিত হয় এবং পরবর্তী সময়ে ব্যবহারকারী সেই ফাইলটি ডাউনলোড করতে পারে।
ফাইল আপলোড করার জন্য HTML Form ব্যবহার করা হয়, এবং ASP.Net C# কোড দিয়ে ফাইলটি সার্ভারে সংরক্ষণ করা হয়।
ASP.Net Web Forms এ ফাইল আপলোড করার জন্য FileUpload
কন্ট্রোল ব্যবহার করা হয়।
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="UploadButton" runat="server" Text="Upload" OnClick="UploadButton_Click" />
protected void UploadButton_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
string filePath = Server.MapPath("~/Uploads/") + filename;
FileUpload1.SaveAs(filePath);
Response.Write("File uploaded successfully.");
}
else
{
Response.Write("Please select a file to upload.");
}
}
এখানে, FileUpload1.HasFile
চেক করা হয় যে ফাইল সিলেক্ট করা হয়েছে কিনা। এরপর ফাইলটি Server.MapPath ব্যবহার করে সঠিক ডিরেক্টরিতে সংরক্ষিত হয়।
ASP.Net MVC এ ফাইল আপলোড করতে HttpPostedFileBase
ব্যবহার করা হয়।
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" />
<input type="submit" value="Upload" />
}
public ActionResult Upload(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
string fileName = Path.GetFileName(file.FileName);
string filePath = Path.Combine(Server.MapPath("~/Uploads"), fileName);
file.SaveAs(filePath);
ViewBag.Message = "File uploaded successfully.";
}
else
{
ViewBag.Message = "Please select a file to upload.";
}
return View();
}
এখানে, ফাইলটি HttpPostedFileBase
প্যারামিটার হিসেবে অ্যাক্সেস করা হয় এবং তারপর SaveAs মেথড ব্যবহার করে সার্ভারে সংরক্ষণ করা হয়।
ASP.Net এ ফাইল ডাউনলোড করার জন্য FileResult
ব্যবহার করা হয়, যা ব্যবহারকারীর ব্রাউজারে ফাইল ডাউনলোড করার জন্য একটি HTTP রেসপন্স পাঠায়।
<asp:Button ID="DownloadButton" runat="server" Text="Download File" OnClick="DownloadButton_Click" />
protected void DownloadButton_Click(object sender, EventArgs e)
{
string filePath = Server.MapPath("~/Uploads/") + "example.txt";
if (File.Exists(filePath))
{
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=example.txt");
Response.TransmitFile(filePath);
Response.End();
}
else
{
Response.Write("File not found.");
}
}
এখানে, Response.TransmitFile
মেথড ব্যবহার করে ফাইলটি ক্লায়েন্ট ব্রাউজারে ডাউনলোডের জন্য পাঠানো হয়।
ASP.Net MVC এ ফাইল ডাউনলোড করার জন্য FileResult
রিটার্ন করা হয়।
public ActionResult Download()
{
string filePath = Path.Combine(Server.MapPath("~/Uploads"), "example.txt");
if (System.IO.File.Exists(filePath))
{
byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
return File(fileBytes, "application/octet-stream", "example.txt");
}
else
{
return Content("File not found.");
}
}
এখানে, File
অ্যাকশন রিটার্ন করার সময় ফাইলটি application/octet-stream
কনটেন্ট টাইপ দিয়ে ডাউনলোড করার জন্য প্রস্তুত করা হয়।
ফাইল আপলোডের সময় কয়েকটি সিকিউরিটি রিকমেন্ডেশন অনুসরণ করা উচিত:
ASP.Net এ ফাইল আপলোড এবং ডাউনলোড করার জন্য আপনি HTML ফর্ম, FileUpload
কন্ট্রোল, এবং HttpPostedFileBase
ব্যবহার করতে পারেন। আপলোড করা ফাইল সার্ভারে সংরক্ষিত হয় এবং ডাউনলোড করার সময় সঠিক কন্টেন্ট টাইপ ও HTTP হেডার সেট করে ফাইলটি ব্রাউজারে পাঠানো হয়। সিকিউরিটি এবং পারফরম্যান্সের দিক থেকেও কিছু পদক্ষেপ নেয়া উচিত যেন ফাইল আপলোড এবং ডাউনলোড প্রক্রিয়া নিরাপদ এবং দ্রুত হয়।
ASP.Net এ ফাইল আপলোড করা একটি সাধারণ কার্যকলাপ, যা ব্যবহারকারীকে সার্ভারে ফাইল পাঠানোর অনুমতি দেয়। ASP.Net Core এবং ASP.Net MVC উভয় ক্ষেত্রেই ফাইল আপলোডের জন্য আলাদা আলাদা পদ্ধতি রয়েছে। এখানে আমরা ASP.Net MVC এবং ASP.Net Core উভয়ের জন্য ফাইল আপলোডের প্রক্রিয়া ব্যাখ্যা করব।
ASP.Net Core অ্যাপে ফাইল আপলোড করার জন্য IFormFile ইন্টারফেস ব্যবহার করা হয়। এটি একটি ইনপুট ফাইল দ্বারা আপলোড হওয়া ফাইলের মেটাডাটা এবং কন্টেন্ট ধারণ করে। ASP.Net Core এ ফাইল আপলোড করার জন্য কিছু নির্দিষ্ট ধাপ অনুসরণ করতে হবে।
ফাইল আপলোডের জন্য একটি ফর্ম তৈরি করতে হবে যেখানে ফাইল ইনপুট ফিল্ড থাকবে। এখানে enctype="multipart/form-data" অ্যাট্রিবিউট অবশ্যই নির্দিষ্ট করতে হবে, কারণ এটি ফাইল ডেটা পাঠাতে সাহায্য করে।
<form method="post" enctype="multipart/form-data">
<div>
<label for="file">Upload File:</label>
<input type="file" name="file" id="file" />
</div>
<button type="submit">Upload</button>
</form>
এখন কন্ট্রোলারে ফাইলটি গ্রহণ করার জন্য IFormFile ব্যবহার করতে হবে। ফাইলটি গ্রহণ করার পর, আপনি এটি সার্ভারে স্টোর করতে পারেন বা অন্য কোন কাজ করতে পারেন।
[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)
{
if (file != null && file.Length > 0)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", file.FileName);
// ফাইল সংরক্ষণ
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
return Content("File uploaded successfully!");
}
return Content("No file selected.");
}
এখানে:
wwwroot/uploads/
ডিরেক্টরিতে সেভ করা হয়েছে।ASP.Net MVC তে ফাইল আপলোড করার প্রক্রিয়া খুবই সাদামাটা, তবে এখানে কিছু অতিরিক্ত কনফিগারেশন থাকতে পারে।
ASP.Net MVC তেও HTML ফর্মের মধ্যে enctype="multipart/form-data" সেট করা প্রয়োজন।
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
<label for="file">Upload File:</label>
<input type="file" name="file" id="file" />
</div>
<button type="submit">Upload</button>
}
এখন কন্ট্রোলারে HttpPostedFileBase ব্যবহার করে ফাইলটি গ্রহণ করতে হবে।
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var filePath = Path.Combine(Server.MapPath("~/Uploads"), file.FileName);
// ফাইল সংরক্ষণ
file.SaveAs(filePath);
return Content("File uploaded successfully!");
}
return Content("No file selected.");
}
এখানে:
Server.MapPath("~/Uploads")
ব্যবহার করে আপলোড পাথ তৈরি করা হয়েছে।ফাইল আপলোডের সময় কিছু সীমাবদ্ধতা থাকতে পারে যেমন, ফাইলের আকার বা ফাইলের ধরন ইত্যাদি। এসব কনফিগারেশন web.config (ASP.Net MVC) বা Startup.cs (ASP.Net Core) ফাইলে নির্ধারণ করা যায়।
ASP.Net Core এ ফাইল আপলোডের জন্য Startup.cs ফাইলে সাইজ সীমাবদ্ধতা নির্ধারণ করা যায়।
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// ফাইল সাইজ সীমাবদ্ধতা সেট করা
services.Configure<FormOptions>(options =>
{
options.MultipartBodyLengthLimit = 104857600; // 100MB
});
}
ASP.Net MVC তে, web.config ফাইলে ফাইল সাইজ সীমাবদ্ধতা নির্ধারণ করা যায়।
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
এখানে, maxRequestLength="1048576"
মানে 1GB এর কাছাকাছি ফাইল সাইজ।
ফাইল টাইপ (যেমন, ছবি, পিডিএফ ইত্যাদি) চেক করা একটি ভাল প্র্যাকটিস, যা নিরাপত্তার জন্য প্রয়োজনীয়। আপনি ফাইলের এক্সটেনশন বা MIME টাইপ চেক করতে পারেন।
public bool IsValidFileType(string fileName)
{
var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".pdf" };
var fileExtension = Path.GetExtension(fileName).ToLower();
return allowedExtensions.Contains(fileExtension);
}
এখানে, .jpg
, .jpeg
, .png
, এবং .pdf
ফাইল টাইপসমূহ অনুমোদিত।
ASP.Net এ ফাইল আপলোড একটি সাধারণ এবং কার্যকরী প্রক্রিয়া, যা ব্যবহারকারীকে সহজেই ফাইল আপলোড করতে সাহায্য করে। ASP.Net Core এবং ASP.Net MVC উভয় ক্ষেত্রে ফাইল আপলোডের প্রক্রিয়া আলাদা হলেও, মূল ধারণা এবং কোড স্ট্রাকচার একই রকম। সার্ভারে ফাইল সেভ করার আগে সেগুলোর সাইজ এবং টাইপ যাচাই করা খুবই গুরুত্বপূর্ণ, যাতে সিস্টেমে নিরাপত্তা বিঘ্নিত না হয়।
ASP.Net Core অ্যাপ্লিকেশনে ফাইল ডাউনলোড করার জন্য আপনি FileResult অথবা PhysicalFileResult ব্যবহার করতে পারেন। এটি ব্যবহারকারীদের কোনো নির্দিষ্ট ফাইল ডাউনলোড করার অনুমতি দেয়। ফাইল ডাউনলোড করতে হলে, প্রথমে সেই ফাইলটি সার্ভারে থাকতে হবে এবং পরে সেই ফাইলের ইউআরএল ব্যবহার করে ডাউনলোডের জন্য একটি রেসপন্স তৈরি করতে হবে।
ASP.Net Core অ্যাপ্লিকেশনে ফাইল ডাউনলোড করার জন্য সাধারণত তিনটি স্টেপ অনুসরণ করতে হয়:
প্রথমে একটি কন্ট্রোলার তৈরি করতে হবে যেখানে ফাইল ডাউনলোডের জন্য একটি অ্যাকশন মেথড থাকবে। এই মেথডে FileResult ব্যবহার করা হবে, যা ফাইলটি ডাউনলোড করার জন্য ব্যবহারকারীকে পাঠাবে।
এখানে, ফাইলের পাথ নির্দিষ্ট করে ফাইলটি রিটার্ন করা হচ্ছে:
public class FileController : Controller
{
public IActionResult DownloadFile(string fileName)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "files", fileName);
// ফাইলটি আছে কিনা চেক করা
if (!System.IO.File.Exists(filePath))
{
return NotFound(); // ফাইল না পাওয়া গেলে 404 রিটার্ন করা
}
var fileBytes = System.IO.File.ReadAllBytes(filePath); // ফাইল থেকে ডাটা পড়া
return File(fileBytes, "application/octet-stream", fileName); // ফাইল রিটার্ন করা
}
}
এখানে:
fileName
প্যারামিটারটি ফাইলের নাম হিসেবে ব্যবহৃত হচ্ছে।Path.Combine
ব্যবহার করে ফাইলটির সম্পূর্ণ পাথ তৈরি করা হচ্ছে।System.IO.File.Exists()
ব্যবহার করে ফাইলের অস্তিত্ব চেক করা হচ্ছে।File()
মেথডটি ফাইলের কন্টেন্ট এবং MIME টাইপ পাঠানোর জন্য ব্যবহৃত হচ্ছে। এখানে "application/octet-stream"
MIME টাইপ ব্যবহার করা হয়েছে, যা সাধারণত কোনো বাইনারি ফাইলের জন্য ব্যবহার হয়।যদি আপনার সার্ভারে কোনো ফাইল শারীরিকভাবে স্টোর করা থাকে, তবে আপনি PhysicalFileResult ব্যবহার করে সরাসরি ফাইলটি রিটার্ন করতে পারেন। এটি ফাইলের পাথ এবং MIME টাইপ সরাসরি নির্দিষ্ট করতে সক্ষম।
public class FileController : Controller
{
public IActionResult DownloadFile(string fileName)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "files", fileName);
// ফাইলটি চেক করা
if (!System.IO.File.Exists(filePath))
{
return NotFound();
}
// ফাইল রিটার্ন করা
return PhysicalFile(filePath, "application/octet-stream", fileName);
}
}
এখানে, PhysicalFile()
মেথডটি সরাসরি ফাইলের পাথ গ্রহণ করে এবং সেটি ডাউনলোড করার জন্য রিটার্ন করে।
ফাইল ডাউনলোড ট্রিগার করার জন্য, আপনি HTML লিংক অথবা জাভাস্ক্রিপ্টের মাধ্যমে কন্ট্রোলারের ডাউনলোড অ্যাকশন কল করতে পারেন।
এটি খুব সহজ উপায়, যেখানে আপনি সরাসরি href অ্যাট্রিবিউট ব্যবহার করে ফাইল ডাউনলোড লিংক তৈরি করতে পারেন:
<a href="/File/DownloadFile?fileName=test.pdf" download>Download PDF</a>
এখানে, href
প্যারামিটারটিতে কন্ট্রোলারের ডাউনলোড ফাংশনের ইউআরএল এবং ফাইল নাম পাস করা হচ্ছে।
এছাড়া, আপনি জাভাস্ক্রিপ্ট ব্যবহার করেও ফাইল ডাউনলোড ট্রিগার করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো:
<button onclick="downloadFile('test.pdf')">Download PDF</button>
<script>
function downloadFile(fileName) {
window.location.href = '/File/DownloadFile?fileName=' + fileName;
}
</script>
এখানে, downloadFile()
ফাংশনটি কন্ট্রোলারের ডাউনলোড ফাংশনে কল করবে এবং নির্দিষ্ট ফাইলটি ডাউনলোড করবে।
ফাইল ডাউনলোড ফিচার তৈরি করার সময় কিছু নিরাপত্তা বিষয়ও মাথায় রাখতে হবে, যেমন:
public IActionResult DownloadFile(string fileName)
{
if (!User.IsInRole("Admin"))
{
return Unauthorized(); // অনুমোদন ছাড়া ফাইল ডাউনলোড করা যাবে না
}
// বাকি কোড
}
ASP.Net Core অ্যাপ্লিকেশনে ফাইল ডাউনলোডের জন্য FileResult, PhysicalFileResult এবং FileStreamResult ব্যবহার করা হয়। আপনি কন্ট্রোলারে ডাউনলোড ফাংশন তৈরি করে ফাইল পাঠাতে পারেন এবং HTML বা জাভাস্ক্রিপ্টের মাধ্যমে ব্যবহারকারীকে ডাউনলোডের জন্য নির্দেশনা দিতে পারেন।
ASP.Net এ একাধিক ফাইল আপলোড (Multiple File Upload) একটি সাধারণ প্রয়োজনীয়তা, যেখানে একাধিক ফাইল এক সাথে সার্ভারে আপলোড করা হয়। ASP.Net MVC বা ASP.Net Core এ ফাইল আপলোড করার জন্য ফর্ম, কন্ট্রোলার, এবং ভিউ এর মাধ্যমে কাজ করতে হয়। একাধিক ফাইল আপলোডের জন্য সাধারণত IFormFile
ব্যবহৃত হয়। নিচে একাধিক ফাইল আপলোড করার প্রক্রিয়া বিস্তারিতভাবে ব্যাখ্যা করা হল।
প্রথমে, আমরা একটি মডেল তৈরি করি, যেখানে ফাইল গুলি আপলোড করা হবে। এখানে একটি List ব্যবহার করা হবে, যা একাধিক ফাইল সন্নিবেশিত করবে।
public class FileUploadViewModel
{
public List<IFormFile> Files { get; set; }
}
এখন, আপনাকে Razor ভিউতে একটি ফর্ম তৈরি করতে হবে, যেখানে ইউজার একাধিক ফাইল সিলেক্ট করতে পারবে। enctype="multipart/form-data"
অ্যাট্রিবিউটটি ফর্মে সেট করতে হবে যাতে ফাইলগুলি সার্ভারে সঠিকভাবে আপলোড করা যায়।
@model FileUploadViewModel
<form asp-action="UploadFiles" method="post" enctype="multipart/form-data">
<div>
<label>Select Files</label>
<input type="file" name="Files" multiple />
</div>
<button type="submit">Upload</button>
</form>
এখানে multiple
অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যা ব্যবহারকারীদের একাধিক ফাইল সিলেক্ট করার অনুমতি দেয়।
কন্ট্রোলারে একটি POST অ্যাকশন তৈরি করতে হবে যা ফাইলগুলি গ্রহণ করবে এবং সার্ভারে আপলোড করবে।
public class FileUploadController : Controller
{
private readonly IWebHostEnvironment _environment;
public FileUploadController(IWebHostEnvironment environment)
{
_environment = environment;
}
[HttpPost]
public async Task<IActionResult> UploadFiles(FileUploadViewModel model)
{
if (model.Files != null && model.Files.Count > 0)
{
foreach (var file in model.Files)
{
if (file.Length > 0)
{
var filePath = Path.Combine(_environment.WebRootPath, "uploads", file.FileName);
// ফাইল সেভ করা
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
}
return RedirectToAction("Index");
}
return View();
}
}
এখানে, UploadFiles অ্যাকশনে FileUploadViewModel মডেলটি পাস করা হচ্ছে। ফাইলগুলি Files
প্রপার্টির মাধ্যমে অ্যাক্সেস করা হচ্ছে এবং CopyToAsync
মেথড ব্যবহার করে ফাইলগুলি সেভ করা হচ্ছে।
আপনি যেই ডিরেক্টরিতে ফাইলগুলো সেভ করবেন (যেমন "uploads"
), সেখানে যথাযথ লেখার অনুমতি থাকতে হবে। এটি নিশ্চিত করুন, বিশেষত ডিপ্লয়মেন্টের পর সার্ভারে।
ASP.Net Core এ Multiple File Upload করার প্রক্রিয়া প্রায় একই, তবে কিছু পার্থক্য থাকতে পারে। বিশেষ করে ASP.Net Core এ IFormFile
ব্যবহার করা হয় এবং এখানে WebHostEnvironment
ব্যবহার করে আপলোড ফোল্ডারের লোকেশন পাওয়া যায়।
public class FileUploadViewModel
{
public List<IFormFile> Files { get; set; }
}
@model FileUploadViewModel
<form asp-action="UploadFiles" method="post" enctype="multipart/form-data">
<div>
<label>Select Files</label>
<input type="file" name="Files" multiple />
</div>
<button type="submit">Upload</button>
</form>
public class FileUploadController : Controller
{
private readonly IWebHostEnvironment _environment;
public FileUploadController(IWebHostEnvironment environment)
{
_environment = environment;
}
[HttpPost]
public async Task<IActionResult> UploadFiles(FileUploadViewModel model)
{
if (model.Files != null && model.Files.Count > 0)
{
foreach (var file in model.Files)
{
if (file.Length > 0)
{
var filePath = Path.Combine(_environment.WebRootPath, "uploads", file.FileName);
// ফাইল সেভ করা
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
}
}
return RedirectToAction("Index");
}
return View();
}
}
যেখানে ফাইল সেভ করা হবে (এখানে "uploads"
ফোল্ডার), সেই ডিরেক্টরিতে লেখার অনুমতি থাকতে হবে।
ফাইল আপলোড করার সময় কিছু নিরাপত্তা বিষয়ক সতর্কতা মাথায় রাখতে হবে:
.jpg
, .png
, .pdf
ইত্যাদি)।if (file.Length > 0 && file.ContentType == "image/jpeg") // শুধুমাত্র JPEG ফাইল আপলোড
{
var filePath = Path.Combine(_environment.WebRootPath, "uploads", Path.GetFileName(file.FileName));
// আরও নিরাপত্তার জন্য ফাইল নাম sanitize করতে হবে
}
ASP.Net এ একাধিক ফাইল আপলোড করা একটি সাধারণ প্রয়োজনীয়তা, যা IFormFile
এবং Razor ভিউ এর মাধ্যমে করা হয়। Model, View, এবং Controller এর মাধ্যমে ফাইলগুলি সার্ভারে আপলোড করা সম্ভব। নিরাপত্তার জন্য ফাইলের ধরন এবং আকার যাচাই করা গুরুত্বপূর্ণ, এবং ফাইলের নামও sanitize করা উচিত।
ASP.Net অ্যাপ্লিকেশনগুলিতে ফাইল ম্যানেজমেন্ট এবং স্টোরেজ একটি গুরুত্বপূর্ণ কার্যকারিতা, বিশেষ করে যখন অ্যাপ্লিকেশনে ব্যবহারকারীর আপলোড করা ফাইলগুলো সংরক্ষণ এবং পরিচালনা করতে হয়। ASP.Net আপনাকে ফাইল আপলোড, ডাউনলোড, ডিলিট, রেনেম, এবং ফাইলের পাথ সম্পর্কিত কাজগুলো সহজভাবে পরিচালনা করার জন্য প্রয়োজনীয় সরঞ্জাম প্রদান করে। এটি সাধারণত ফাইল সিস্টেমে কাজ করতে অথবা ক্লাউড স্টোরেজ যেমন Azure Blob Storage ব্যবহার করতে সাহায্য করে।
ASP.Net অ্যাপ্লিকেশনে ফাইল আপলোড করার জন্য সাধারণত IFormFile
ব্যবহার করা হয়, যা ব্যবহারকারীর আপলোড করা ফাইলগুলোকে সার্ভারে সংরক্ষণ করতে সহায়তা করে।
HTML অংশ:
<form enctype="multipart/form-data" method="post">
<input type="file" name="uploadedFile" />
<button type="submit">ফাইল আপলোড করুন</button>
</form>
C# কন্ট্রোলার অংশ:
[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile uploadedFile)
{
if (uploadedFile != null && uploadedFile.Length > 0)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", uploadedFile.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await uploadedFile.CopyToAsync(stream);
}
return Content("ফাইল সফলভাবে আপলোড হয়েছে!");
}
return Content("ফাইল নির্বাচন করা হয়নি");
}
এখানে, ফাইলটি wwwroot/uploads
ডিরেক্টরিতে আপলোড হবে। IFormFile
হল ASP.Net Core এর ফাইল আপলোডের জন্য ব্যবহৃত একটি ইন্টারফেস।
ফাইল ডাউনলোড করতে হলে, সার্ভারের কোনো ফাইলকে FileResult রিটার্ন করতে হয়। ASP.Net অ্যাপ্লিকেশন থেকে ফাইল ডাউনলোড করতে ব্যবহারকারীকে একটি URL বা বাটন প্রদান করা হয়, যা ফাইলটি ডাউনলোড করার জন্য সার্ভারে রিকোয়েস্ট পাঠায়।
HTML অংশ:
<a href="/Home/DownloadFile/filename.jpg">ফাইল ডাউনলোড করুন</a>
C# কন্ট্রোলার অংশ:
public IActionResult DownloadFile(string fileName)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", fileName);
var fileBytes = System.IO.File.ReadAllBytes(filePath);
return File(fileBytes, "application/octet-stream", fileName);
}
এখানে, File()
মেথড ফাইলটি নির্দিষ্ট ContentType এবং নাম সহ ডাউনলোড করার জন্য রিটার্ন করে।
ফাইলের নাম পরিবর্তন বা মুছে ফেলতে System.IO নেমস্পেসের File.Move()
এবং File.Delete()
মেথড ব্যবহার করা হয়।
public IActionResult RenameFile(string oldFileName, string newFileName)
{
var oldFilePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", oldFileName);
var newFilePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", newFileName);
if (System.IO.File.Exists(oldFilePath))
{
System.IO.File.Move(oldFilePath, newFilePath);
return Content("ফাইলের নাম সফলভাবে পরিবর্তন করা হয়েছে!");
}
return Content("ফাইল পাওয়া যায়নি");
}
public IActionResult DeleteFile(string fileName)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", fileName);
if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
return Content("ফাইল সফলভাবে মুছে ফেলা হয়েছে!");
}
return Content("ফাইল পাওয়া যায়নি");
}
এখানে, File.Move()
মেথড ফাইলের নাম পরিবর্তন করতে এবং File.Delete()
মেথড ফাইল মুছে ফেলতে ব্যবহৃত হয়েছে।
ASP.Net অ্যাপ্লিকেশন ফাইল আপলোড এবং ডাউনলোডের জন্য শুধু লোকাল ফাইল সিস্টেম নয়, আপনি Azure Blob Storage ব্যবহার করেও ফাইল সংরক্ষণ করতে পারেন। এটি স্কেলেবিলিটি এবং নিরাপত্তা নিশ্চিত করে, কারণ ফাইলগুলি ক্লাউডে সংরক্ষিত থাকে।
Azure Blob Storage NuGet প্যাকেজ ইনস্টল করা:
Install-Package Azure.Storage.Blobs
Blob Storage কনফিগারেশন এবং ফাইল আপলোড:
Azure স্টোরেজ কনফিগার করার জন্য ConnectionString এবং ContainerName প্রাপ্ত করতে হবে এবং তারপর BlobClient তৈরি করতে হবে।
public async Task<IActionResult> UploadToBlob(IFormFile uploadedFile)
{
var connectionString = "<your_connection_string>";
var containerName = "<your_container_name>";
var blobServiceClient = new BlobServiceClient(connectionString);
var blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
var blobClient = blobContainerClient.GetBlobClient(uploadedFile.FileName);
using (var stream = uploadedFile.OpenReadStream())
{
await blobClient.UploadAsync(stream, overwrite: true);
}
return Content("ফাইল সফলভাবে Azure Blob Storage-এ আপলোড হয়েছে!");
}
ASP.Net এ ফাইলের মেটাডেটা (যেমন, ফাইলের আকার, তৈরি তারিখ, এক্সটেনশন) সহজে পরিচালনা করা যায়। এটি সার্ভারে সংরক্ষিত ফাইলের অতিরিক্ত তথ্য সংগ্রহ করতে সাহায্য করে।
public IActionResult GetFileMetadata(string fileName)
{
var filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "uploads", fileName);
var fileInfo = new FileInfo(filePath);
var metadata = new
{
FileName = fileInfo.Name,
FileSize = fileInfo.Length,
CreationTime = fileInfo.CreationTime,
LastModifiedTime = fileInfo.LastWriteTime
};
return Json(metadata);
}
এখানে, FileInfo
ক্লাস ব্যবহার করে ফাইলের আকার, তৈরি তারিখ, এবং অন্যান্য মেটাডেটা পাওয়া যাচ্ছে।
ASP.Net এ ফাইল ম্যানেজমেন্ট এবং স্টোরেজ ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে ফাইল আপলোড, ডাউনলোড, মুছে ফেলা, রেনেম করা এবং ক্লাউড স্টোরেজ সলিউশন ব্যবহার করার ক্ষেত্রে। আপনি IFormFile
দিয়ে ফাইল আপলোড করতে পারেন, System.IO
দিয়ে ফাইল ম্যানিপুলেশন করতে পারেন এবং Azure Blob Storage ব্যবহার করে ক্লাউডে ফাইল সংরক্ষণ করতে পারেন। ASP.Net ফ্রেমওয়ার্ক সেগুলোর সবকটিই সহজভাবে পরিচালনা করার জন্য প্রয়োজনীয় সরঞ্জাম সরবরাহ করে।
ASP.Net অ্যাপ্লিকেশনে ফাইল আপলোড একটি সাধারণ প্রক্রিয়া হলেও, এটি সঠিকভাবে কনফিগার না করলে নিরাপত্তা ঝুঁকি সৃষ্টি করতে পারে। যেমন, বিপজ্জনক ফাইল টাইপ আপলোড করা, ম্যালওয়্যার বা ভাইরাস ধারণ করে এমন ফাইল আপলোড করা, বা সিস্টেমে অতিরিক্ত বড় ফাইল আপলোড করা। সুতরাং, ফাইল আপলোডের সময় কিছু নিরাপত্তা বৈশিষ্ট্য এবং কনফিগারেশন সেট করা অত্যন্ত গুরুত্বপূর্ণ।
ফাইল আপলোডের নিরাপত্তা নিশ্চিত করতে কিছু পদক্ষেপ গ্রহণ করা প্রয়োজন। যেমন ফাইলের ধরণ এবং সাইজ চেক করা, ফাইলের নাম স্যানিটাইজ করা এবং নিরাপদ স্থানে ফাইল সংরক্ষণ করা।
কোনো ফাইল আপলোড করার আগে, আপনাকে নিশ্চিত হতে হবে যে ফাইলটি অনুমোদিত টাইপের। উদাহরণস্বরূপ, আপনি শুধু .jpg, .png, .pdf অথবা অন্যান্য নিরাপদ ফাইল টাইপগুলোর অনুমতি দিতে পারেন।
public bool IsValidFileType(string fileName)
{
var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".pdf" };
var extension = Path.GetExtension(fileName).ToLower();
return allowedExtensions.Contains(extension);
}
এখানে, IsValidFileType
মেথড ফাইলের এক্সটেনশন চেক করে, এবং শুধু অনুমোদিত এক্সটেনশনের ফাইলগুলো গ্রহণ করবে।
আপনার অ্যাপ্লিকেশনটি ফাইলের সাইজ সীমিত করার মাধ্যমে অতিরিক্ত বড় ফাইল আপলোড হওয়া থেকে রক্ষা পাবে। এটি সার্ভারের রিসোর্স ব্যবহারের প্রতি নির্ভর করে। আপনি web.config ফাইলে অথবা কোডে ফাইল সাইজ সীমা নির্ধারণ করতে পারেন।
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="110" />
</system.web>
</configuration>
এখানে, maxRequestLength
হলো ফাইল সাইজের সীমা (যেটি কিলোবাইটে নির্ধারিত)। উদাহরণস্বরূপ, 1048576 KB = 1 GB।
public bool IsValidFileSize(long fileSize)
{
const long maxSize = 10 * 1024 * 1024; // 10MB
return fileSize <= maxSize;
}
এখানে, IsValidFileSize
মেথড ফাইল সাইজ চেক করে এবং 10MB এর বেশি ফাইল গ্রহণ করবে না।
ফাইলের নাম দিয়ে কোনও স্ক্রিপ্ট বা কোড ইঞ্জেকশন হতে পারে। তাই, ফাইলের নাম স্যানিটাইজ করা গুরুত্বপূর্ণ। সাধারণত, ফাইলের নামের মধ্যে স্পেস, বিশেষ চিহ্ন বা অক্ষরের উপস্থিতি হতে পারে, যা নিরাপত্তার জন্য ক্ষতিকর।
public string SanitizeFileName(string fileName)
{
var sanitizedFileName = Path.GetFileName(fileName); // Remove any directory path
sanitizedFileName = sanitizedFileName.Replace(" ", "_"); // Replace spaces with underscores
sanitizedFileName = sanitizedFileName.ToLower(); // Convert to lowercase
return sanitizedFileName;
}
এখানে, SanitizeFileName
মেথড ফাইলের নামকে নিরাপদ করে তোলে, যেখানে স্পেস বা কোনো অবাঞ্ছিত অক্ষর নেই।
ফাইল আপলোড করার পর, সেগুলোকে public folder-এ নয়, বরং নিরাপদ জায়গায় সংরক্ষণ করা উচিত। সাধারণত, wwwroot ফোল্ডারটি অ্যাপ্লিকেশনের পাবলিক ফোল্ডার, কিন্তু আপনার ফাইলগুলো নিরাপদ স্থানে রাখতে হবে, যেখানে সেগুলো সরাসরি ওয়েবের মাধ্যমে অ্যাক্সেসযোগ্য হবে না।
public string SaveFile(IFormFile file)
{
var uploadsDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Uploads");
if (!Directory.Exists(uploadsDirectory))
{
Directory.CreateDirectory(uploadsDirectory);
}
var fileName = SanitizeFileName(file.FileName);
var filePath = Path.Combine(uploadsDirectory, fileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
file.CopyTo(stream);
}
return filePath;
}
এখানে, ফাইল "Uploads" নামক একটি নিরাপদ ডিরেক্টরিতে সংরক্ষণ করা হচ্ছে এবং ফাইলের নাম স্যানিটাইজ করা হয়েছে।
[HttpPost]
public IActionResult UploadFile(IFormFile file)
{
if (file == null || file.Length == 0)
{
return Content("No file selected.");
}
// ফাইল টাইপ যাচাই
if (!IsValidFileType(file.FileName))
{
return Content("Invalid file type.");
}
// ফাইল সাইজ যাচাই
if (!IsValidFileSize(file.Length))
{
return Content("File size exceeds the limit.");
}
// ফাইল স্যানিটাইজ
var filePath = SaveFile(file);
return Content($"File uploaded successfully: {filePath}");
}
এখানে, ফাইলটি আপলোড করার আগে ফাইল টাইপ, ফাইল সাইজ এবং ফাইল নাম স্যানিটাইজ চেক করা হয়েছে।
ফাইল আপলোড নিরাপদভাবে পরিচালনা করার জন্য কিছু গুরুত্বপূর্ণ কনফিগারেশন প্রক্রিয়া রয়েছে:
এই পদক্ষেপগুলো অনুসরণ করে আপনি ASP.Net অ্যাপ্লিকেশনে নিরাপদ ফাইল আপলোড ব্যবস্থা তৈরি করতে পারবেন।
Read more