PDA

View Full Version : مشکل با کلاس آپلود فایل



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>
}



لطفا راهنمایی کنید و اینکه اگر کلاس مشکلی داره بفرمایید ...

خیلی ممنون

uthman
چهارشنبه 28 آبان 1393, 00:01 صبح
سلام .کد زیر رو

@using (Html.BeginForm("Upload", "Home"))

به


@using (Html.BeginForm("Upload", "Home",FormMethod.Post, new { enctype = "multipart/form-data" }))


تغییر بده

jaykob
چهارشنبه 28 آبان 1393, 08:19 صبح
سلام .کد زیر رو

@using (Html.BeginForm("Upload", "Home"))

به


@using (Html.BeginForm("Upload", "Home",FormMethod.Post, new { enctype = "multipart/form-data" }))


تغییر بده

سلام

این کار رو هم کردم ولی چون این view من داخل یک Layout است و خود Layout من در فوتر 2 کادر خبرنامه داره و عملیات پست انجام می شه این کد رو که اضافه می کنم می گه که مقادیر خبرنامه خالی است یعنی یک جورایی می خواد اون partial هارو هم پست کنه ...

hakim22
شنبه 01 آذر 1393, 16:14 عصر
بدون new { enctype = "multipart/form-data" } که اصلا فایلی به سرور پست نمیشه ، شما باید مشکل ویو و لیوت رو حل کنید

jaykob
یک شنبه 02 آذر 1393, 09:40 صبح
بدون new{ enctype = "multipart/form-data"} که اصلا فایلی به سرور پست نمیشه ، شما باید مشکل ویو و لیوت رو حل کنید

سلام

ممنون . اما چطور ؟ هر چی سعی کردم نتونستم من داخل لایوتم یک partial view خبرنامه دارم که اگر این کد رو داخل post فایلم بزارم اون پیام خطا می ده ...

تشکر