jaykob
سه شنبه 27 آبان 1393, 18:40 عصر
سلام
من یک کلاس نوشتم به صورت مجزا که عملیات آپلود فایل را با پارامتر های دلخواه من انجام دهد . به شرح زیر :
public class Uploder
{
/// <summary>
/// متغییر نتیجه آپلود فایل
/// </summary>
public string ResultString;
/// <summary>
/// آدرس فایل آپلود شده نهایی
/// </summary>
public string PatchEnd;
/// <summary>
/// وضعیت نهایی آپلود فایل
/// </summary>
public bool Status;
/// <summary>
/// کلاس آپلود فایل
/// </summary>
/// <param name="yourFile">فایل</param>
/// <param name="patch">محل ذخیره فایل</param>
/// <param name="maxSize">حداکثر حجم فایل</param>
/// <param name="minSize">حداقل حجم فایل</param>
/// <param name="extensions">پسوند های مجاز برای آپلود</param>
public void UploadFile(HttpPostedFileBase yourFile, string patch, int maxSize,int minSize, string[] extensions)
{
#region ساخت رشته تصادفی
var randomString = new PasswordGenerator { PassLenght = 5, PasswordLevel = 1 };
randomString.PasswordGenerate();
#endregion
#region بررسی خالی نبودن فایل آپلود
if (yourFile.ContentLength == 0)
{
ResultString = "فایلی برای آپلود وجود ندارد و یا تشخیص داده نشده است";
Status = false;
return;
}
#endregion
#region بررسی بیشترین حجمی که کاربر می تواند آپلود کند
if (yourFile.ContentLength > maxSize)
{
ResultString = "حجم فایل آپلودی شما بیش از " + maxSize + "است";
Status = false;
return;
}
#endregion
#region بررسی کمترین حجمی که فایل کاربر باید داشته باشد
if (yourFile.ContentLength < minSize)
{
ResultString = "حجم فایل شما نباید کمتر از " + minSize + "باشد";
Status = false;
return;
}
#endregion
#region بررسی نوع فایل های مجاز
string extension = Path.GetExtension(yourFile.FileName).ToLower();
if (extensions.Any(item => extension != item))
{
ResultString = "نوع فایل در حال ارسال شما معتبر نیست";
Status = false;
return;
}
#endregion
#region بدست آوردن نام فایل آپلودی
var fileName = Path.GetFileName(yourFile.FileName);
#endregion
#region بررسی و تغییر اینکه اگر فایلی با همین نام از قبل بوده
var path = Path.Combine(HttpContext.Current.Server.MapPath(pa tch), fileName);
while (File.Exists(patch))
{
path = Path.Combine(HttpContext.Current.Server.MapPath(pa tch), fileName + randomString.Result);
}
#endregion
try
{
PatchEnd = path;
yourFile.SaveAs(path);
Status = true;
}
catch (Exception)
{
Status = false;
ResultString = "در حال حاضر امکان آپلود فایل شما وجود ندارد";
}
}
}
اما زمانی در کنترلر ها ازش استفاده می کنم با خطایی که ضمیمه کردم مواجه می شم
کد کنترلر من به شکل زیر است :
[HttpGet]
public ActionResult Upload()
{
return View();
}
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
var uploder=new Uploder();
uploder.UploadFile(file,"~/Files",40000,44,new []{".jpg",".pdf"});
ViewBag.Message = uploder.ResultString;
return View();
}
و کد View هم به شکل زیر :
@{
ViewBag.Title = "Upload";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("Upload", "Home"))
{
<fieldset>
<legend>Upload a file</legend>
<div class="editor-field"> @Html.TextBox("file", "", new { type = "file" }) </div>
<div class="editor-field"> <input type="submit" value="Upload" /> </div>
<b>@ViewBag.Message</b>
</fieldset>
}
لطفا راهنمایی کنید و اینکه اگر کلاس مشکلی داره بفرمایید ...
خیلی ممنون
من یک کلاس نوشتم به صورت مجزا که عملیات آپلود فایل را با پارامتر های دلخواه من انجام دهد . به شرح زیر :
public class Uploder
{
/// <summary>
/// متغییر نتیجه آپلود فایل
/// </summary>
public string ResultString;
/// <summary>
/// آدرس فایل آپلود شده نهایی
/// </summary>
public string PatchEnd;
/// <summary>
/// وضعیت نهایی آپلود فایل
/// </summary>
public bool Status;
/// <summary>
/// کلاس آپلود فایل
/// </summary>
/// <param name="yourFile">فایل</param>
/// <param name="patch">محل ذخیره فایل</param>
/// <param name="maxSize">حداکثر حجم فایل</param>
/// <param name="minSize">حداقل حجم فایل</param>
/// <param name="extensions">پسوند های مجاز برای آپلود</param>
public void UploadFile(HttpPostedFileBase yourFile, string patch, int maxSize,int minSize, string[] extensions)
{
#region ساخت رشته تصادفی
var randomString = new PasswordGenerator { PassLenght = 5, PasswordLevel = 1 };
randomString.PasswordGenerate();
#endregion
#region بررسی خالی نبودن فایل آپلود
if (yourFile.ContentLength == 0)
{
ResultString = "فایلی برای آپلود وجود ندارد و یا تشخیص داده نشده است";
Status = false;
return;
}
#endregion
#region بررسی بیشترین حجمی که کاربر می تواند آپلود کند
if (yourFile.ContentLength > maxSize)
{
ResultString = "حجم فایل آپلودی شما بیش از " + maxSize + "است";
Status = false;
return;
}
#endregion
#region بررسی کمترین حجمی که فایل کاربر باید داشته باشد
if (yourFile.ContentLength < minSize)
{
ResultString = "حجم فایل شما نباید کمتر از " + minSize + "باشد";
Status = false;
return;
}
#endregion
#region بررسی نوع فایل های مجاز
string extension = Path.GetExtension(yourFile.FileName).ToLower();
if (extensions.Any(item => extension != item))
{
ResultString = "نوع فایل در حال ارسال شما معتبر نیست";
Status = false;
return;
}
#endregion
#region بدست آوردن نام فایل آپلودی
var fileName = Path.GetFileName(yourFile.FileName);
#endregion
#region بررسی و تغییر اینکه اگر فایلی با همین نام از قبل بوده
var path = Path.Combine(HttpContext.Current.Server.MapPath(pa tch), fileName);
while (File.Exists(patch))
{
path = Path.Combine(HttpContext.Current.Server.MapPath(pa tch), fileName + randomString.Result);
}
#endregion
try
{
PatchEnd = path;
yourFile.SaveAs(path);
Status = true;
}
catch (Exception)
{
Status = false;
ResultString = "در حال حاضر امکان آپلود فایل شما وجود ندارد";
}
}
}
اما زمانی در کنترلر ها ازش استفاده می کنم با خطایی که ضمیمه کردم مواجه می شم
کد کنترلر من به شکل زیر است :
[HttpGet]
public ActionResult Upload()
{
return View();
}
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
var uploder=new Uploder();
uploder.UploadFile(file,"~/Files",40000,44,new []{".jpg",".pdf"});
ViewBag.Message = uploder.ResultString;
return View();
}
و کد View هم به شکل زیر :
@{
ViewBag.Title = "Upload";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("Upload", "Home"))
{
<fieldset>
<legend>Upload a file</legend>
<div class="editor-field"> @Html.TextBox("file", "", new { type = "file" }) </div>
<div class="editor-field"> <input type="submit" value="Upload" /> </div>
<b>@ViewBag.Message</b>
</fieldset>
}
لطفا راهنمایی کنید و اینکه اگر کلاس مشکلی داره بفرمایید ...
خیلی ممنون