فراسان

به اشتراک بگذارید برای یادگیری، یاد بگیرید برای به اشتراگ گذاری

آپلود تصاویر در ASP.NET (در فایل فیزیکی و در دیتابیس)

در این مطلب کوتاه آموزشی با نحوه آپلود تصاویر در یک وب سایت مبتنی بر ASP.NET آشنا خواهید شد. در اینجا ما یک برنامه کوچک به زبان سی شارپ می نویسیم که کاربر را قادر می سازد که یک فایل تصویری با پسوند JPG را انتخاب و آپلود کند. در این آموزش فرض بر این است که شما با سی شارپ و مباحث پایه ای دات نت آشنا هستید.
برای این کار ابتدا یک کنترل FileUpload را از Toolbox (موجود در قسمت Standard) به صفحه خود اضافه کنید. یا اینکه کد زیر را در محلی که می خواهید کنترل آپلود فایل نمایش داده شود، قرار دهید.

<asp:FileUpload ID="PicUpload" runat="server" />

قبل از هر چیز فضای نام System.IO را using کنید. حالا کدهای زیر را در روالی که می خواهید عمل آپلود فایل در آن انجام شود قرار دهید. به طور مثال اگر می خواهید وقتی روی دکمه Upload کلیک شد، تصویر کاربر بر روی سرور آپلود شود، این کدها را درون روال Upload_Click قرار دهید.

if (PicUpload.PostedFile != null)
{
HttpPostedFile Pic = PicUpload.PostedFile;
if (Pic.ContentLength == 0)
{
Response.Write("فایل شما هیچ محتوایی ندارد!");
return;

}
if (Path.GetExtension(Pic.FileName).ToLower() != «.jpg»)
{
Response.Write(«پسوند این فایل نامعتبر است.»);
return;
}
byte[] data = new Byte[Pic.ContentLength];
Pic.InputStream.Read(data, 0, Pic.ContentLength);
string SavePath = @»images/»;
FileStream newPic = new FileStream(Server.MapPath(SavePath + Pic.FileName), FileMode.Create);
newPic.Write(data, 0, Pic.ContentLength);
newPic.Close();
}

این کد چطور کار می کند؟

در خط اول ابتدا چک می کنیم که آیا کاربر فایلی را برای آپلود انتخاب کرده است یا خیر. یعنی خاصیت PostedFile اگر برابر null بود به این معنی است که کاربر هیچ فایلی را برای آپلود انتخاب نکرده است پس کدهای زیر آن نباید اجرا شوند. سپس متغیری به نام Pic از نوع HttpPostedFile می سازیم تا بتوانیم اطلاعاتی در مورد فایل انتخابی کاربر بدست آوریم. بعد از آن با یک شرط چک می کنیم که حجم فایل انتخابی کاربر برابر با صفر نباشد. در if بعدی هم چک می کنیم که اگر پسوند فایل برابر jpg نبود یک پیغام خطای مناسب به کاربر نشان بده. بدیهی است که در اینجا می توانید پسوندهای دیگری مثل pdf را چک کنید.

دو خط زیر هم اطلاعات فایل انتخابی توسط کاربر را می خوانند :

byte[] data = new Byte[Pic.ContentLength];
Pic.InputStream.Read(data, 0, Pic.ContentLength);

و خط های زیر نیز عمل ساختن فایل جدید از روی فایل کاربر بر روی سرور (عمل آپلود) را انجام می دهند :

FileStream newPic = new FileStream(Server.MapPath(SavePath + Pic.FileName), FileMode.Create);
newPic.Write(data, 0, Pic.ContentLength);

آپلود تصاویر در یک دیتابیس SQL Server

اگر بخواهید به جای آپلود فایل کاربر روی یک فایل فیزیکی موجود در سرور آن را در یک دیتابیس SQL Server آپلود کنید، می توانید از قطعه کد زیر به جای دو خط بالا استفاده کنید. ابتدا فضاهای نام System.Data و System.Data.SqlClient را using کنید و سپس کد زیر را در جای مناسب قرار دهید.

object objImage = data;
SqlConnection connection = new SqlConnection(connectionString);
string sql_insert = "INSERT INTO tblImage (picture) values (@img)";
SqlCommand command = new SqlCommand(sql_insert, connection);
SqlParameter parameter = new SqlParameter("@img", SqlDbType.Image);
parameter.Value = objImage;
command.Parameters.Add(parameter);
connection.Open();
command.ExecuteNonQuery();
connection.Close();

در کد بالا رشته اتصال دیتابیس خود را به جای connectionString قرار دهید و نام جدول و فیلدهای خود را در متغیر sql_insert بنویسید.

farasun.wordpress.com

پ.ن : این مطلب تقدیم می شود به همکلاسی های عزیز!

if (Path.GetExtension(Pic.FileName).ToLower() != «.jpg»)
{
Response.Write(«پسوند این فایل نامعتبر است.»);
return;
}

7 پاسخ به آپلود تصاویر در ASP.NET (در فایل فیزیکی و در دیتابیس)

  1. محمد ژانویه 26, 2010 در 7:25 ب.ظ.

    ایمان جان ممنون . اگر بخواهیم اسم فایل رو هم نام لاگین طرف که الان توی متغییر سشن ذخیره شده بکنیم باید چکار کنیم ؟

  2. ایمان ژانویه 26, 2010 در 9:43 ب.ظ.

    @ محمد : خواهش میکنم دوست من،
    خیلی راحت این کد رو جایگزین اون دو خط کن :
    string SavePath = @”images/” + Session["username"].ToString() + ".jpg";
    FileStream newPic = new FileStream(Server.MapPath(SavePath), FileMode.Create);

    مسیر و متغیر Session خودت رو جایگزین کن در کدها.

  3. بازتاب: PHP برای برنامه نویسان ASP.NET – قسمت ششم « فراسان

  4. سپیده اکتبر 17, 2010 در 2:05 ب.ظ.

    سلام اگه بخوام فایلی رو مثل wordو فیلم در پایگاه ذخیره کنم چیکار باید بکنم؟
    لطفا راهنماییم کنید

  5. سپیده اکتبر 24, 2010 در 10:49 ب.ظ.

    خیلی ممنون حالا می خوام فایلمو در فایل فیزیکی ذخیره کنم عین همون کدهای بالا رو مینویسم ولی جاییکه نوشتین»string SavePath = @»/images توی «»@ چی بنویسم ، اخه هر عکسی رو که از هارد انتخاب میکنم این پیغامو میده ‹images/D:\Documents and Settings\s\My Documents\My Pictures\819.jpg› is not a valid virtual path.

    سوال بعدی اینکه با این روش فیزیکی از چه راهی میتونم داده ها رو بازیابی کنم؟

  6. payman دسامبر 18, 2010 در 10:55 ق.ظ.

    hi Mr Eman , tanx for your useful posts
    i want to know the difference between this 2 path direction :
    1:using @ in front of specified folder
    2: using ~/ in the front of specified folder
    plz if u can send me an email and expalain it
    tanx a gain
    all the best

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌واره‌ی وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

دنبال‌کردن

هر نوشته‌ی تازه‌ای را در نامه‌دان خود دریافت نمایید.

به 36 مشترک دیگر بپیوندید