PDA

View Full Version : سوال: ذخیره عکس و بازیابی آن از بانک sql



mahdi87_gh
یک شنبه 28 تیر 1388, 17:28 عصر
سلام

من میخوام عکسهایی که Upload میشه رو داخل دیتابیس Sql ذخیره کنم. از چه روشی استفاده کنم بهتره؟ من با روش زیر عکس رو ذخیره کردم ولی نمی دونم چطوری باید بازیابیش بکنم. جستجو کردم ولی نتیجه ای نگرفتم. من میخوام عکس رو داخل یه img یا ...نمایش بدم
جدول من یه فیلد id هم داره که از نوع identity تعریفش کردم

try
{
MemoryStream ms = new MemoryStream();
byte[] arrImage = FileUpload1.FileBytes;

SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\WebSite\ \Mizoon\\App_Data\\ASPNETDB.MDF;Integrated Security=True;User Instance=True");
string strSQL = "INSERT INTO Photos VALUES ( @username, @photo,@cat,@visited)";
SqlCommand cmd = new SqlCommand(strSQL, con);

cmd.Parameters.Add(new SqlParameter("@username", SqlDbType.Char, 25)).Value = Page.User.Identity.Name;//filename
cmd.Parameters.Add(new SqlParameter("@photo", SqlDbType.Binary)).Value = arrImage;//picture
cmd.Parameters.Add(new SqlParameter("@cat", SqlDbType.Char, 1)).Value = DropDownList1.SelectedItem.Value;//id
cmd.Parameters.Add(new SqlParameter("@visited", SqlDbType.Int)).Value = 0;//id
con.Open();
cmd.ExecuteNonQuery();
results.Text += FileUpload1.ID + " Successed insert db.<br />";
con.Close();
}
catch (Exception ex)
{
results.Text += ex.Message;
}

mahdi87_gh
یک شنبه 28 تیر 1388, 19:31 عصر
دوستان لطفا یه نفر کمک کنه:ناراحت:
من روش زیر رو توستم از پست های دیگه پیدا کنم ولی این روش عکس رو در یک صفحه دیگه نمایش میده که اینطوری بدرد من نمیخوره!!!!

try
{
SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\WebSite\ \Mizoon\\App_Data\\ASPNETDB.MDF;Integrated Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand("select * from Photos where id=1", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
SqlCommandBuilder cbd = new SqlCommandBuilder(da);
DataTable dt = new DataTable();
da.Fill(dt);

byte[] arrPicture = ((byte[])(dt.Rows[0]["photo"]));
MemoryStream ms = new MemoryStream(arrPicture);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(ms);
Response.ContentType = "image/Jpeg";
bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
ms.Close();
}
catch (Exception ex)
{
results.Text = ex.Message;
}
دوستان کمک کنید لطفا

ehsan2007
یک شنبه 28 تیر 1388, 20:25 عصر
چرا دوست عزيز عكس هارو داخل ديتابيس ذخيره ميكني از اين كاري كه من ميكنم استفاده كن

فرض ميكنيم شما عكس هارو داخل دايركتوري به نام image/pic ذخيره ميكنيد و واسه شما مهم هستش كه عكس هارو براي كاربران ديگه نشون داده نشه
كاربر يك راست كليك كه بكنه آدرس عكس هارو ميتونه ببينه و اگه مثلا شماره دانشجويي فرد ديگه رو داشته باشه ميتونه ببينه عكسشو
حالا ما ميخوايم كاري كنيم كه آدرس واسه همه عكس ها يكي باشه
يك صفحه جديد ايجاد كن و تماميه كد هاي html رو حذف كن به جز كد سي شارپ يا vb بالاي صفحه

سپس در كد صفحه تحت سرور اين كد رو بزار

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Drawing;
using System.Drawing.Imaging;

public partial class AdministratorAll_Ra_ShowImageRa : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Bitmap objBitmap;
try
{
Hash _k = new Hash();
string ID = Request.QueryString["ID"].ToString().Replace(" ", "+");
ID = _k.Hashout(ID, "123456");
objBitmap = new Bitmap(Server.MapPath("~/image/pic/B" + ID + ".jpg"));
objBitmap.Save(Response.OutputStream, ImageFormat.Jpeg);
objBitmap.Dispose();
}
catch (Exception)
{
objBitmap = new Bitmap(Server.MapPath("~/image/pic/NoPic.jpg"));
objBitmap.Save(Response.OutputStream, ImageFormat.Jpeg);
objBitmap.Dispose();
}
}
}

در كد بالا يك QueryString به نام ID ميفرستيم كه قبلا Hash شده و رمز گشايي ميشه شما ميتونيد
اگه از سيسن استفاده ميكنيد از QueryString استفاده نكنيد
در آخر اين كه تا فرد دايركتوري عكس روي سرور رو پيدا نكنه نميتونه عكس هارو ببينه كه اين كارم تقريبا فكر كنم غير ممكنه چون يك بار با يك نرم افزار دايركتوري هاي روي سرور يك سايترو ميخواستم پيدا كنم همون آدرس هايرو ميداد كه داخل كدهاي html صفحه ها بود كه شما به هيچ وجه آدرس رو در كد html نميگذاريد

mahdi87_gh
یک شنبه 28 تیر 1388, 20:43 عصر
دوست عزیز از شما خیلی ممنون هستم اما من هدفم اینه که یه سایت اشتراک عکس درست کنم و پسفردا باید اینو به عنوان یه پروژه درسی تحویل بدم. کاری که می خوام انجام بدم اینه که عکسها به صورت Thumbanial در یک جدول یا گرید نمایش داده بشن و با کلیک روی هر عکس به صفحه ای منتقل بشیم که عکس رو در اندازه واقعی نمایش میده. این کد عکس رو در صفحه ای جدا نمایش میده. اگه تونستی یه نگاه به این سایت بنداز متوجه منظورم میشی
http://www.photosharing.ir/index.php?cat=1
بازم ممنونم

SS^T^NN
یک شنبه 28 تیر 1388, 23:25 عصر
دوست عزیزم برو به لینک زیر یه پروژه هست که جوابتو میگیری ، خیلی هم سادست

http://www.codeproject.com/KB/aspnet/fileupload.aspx#form

دانش آموز
دوشنبه 29 تیر 1388, 00:43 صبح
برات گذاشتم ببین به دردت میخوره ولی تحت وب نیست.

khorsandreza
دوشنبه 29 تیر 1388, 18:01 عصر
ببین این هم به دردت میخوره تحت وب هست

http://barnamenevis.org/forum/showthread.php?t=148448&page=2

پاسخ شماره 18 را ببین