PDA

View Full Version : سوال: قرار دادن عکس در دیتابیس با دستورات asp.net



mikhak_sefid
چهارشنبه 15 شهریور 1391, 21:36 عصر
با سلام خدمت جمع مهندسین
ببخشید من با کنترل detailview به صورت ویزاردی اطلاعات چند فیلد نام و فامیل و .... رو وارد db می کنم
برا قرار دادن عکس کاربر چکار کنم؟
چطوری عکس کاربر رو بفرستم توی db?
خیلی لازم دارم
خواهش می کنم کمکم کنید:ناراحت:

meisam12
چهارشنبه 15 شهریور 1391, 22:11 عصر
سلام دوست عزیز
بهتر است مسیر عکس را در دیتابیس ذخیره کنی و خود عکس را فرضاً در پوشه upload سایتت ذخیره کنی.

private string getUrlImage()
{

bool ext = true;
string uploadDirectory;
uploadDirectory = Path.Combine(Request.PhysicalApplicationPath, "Uploads");
string extension = Path.GetExtension(fuAvatarUser.PostedFile.FileName );
switch (extension.ToLower())
{
case ".bmp":
case ".gif":
case ".jpg":
break;
default:
ext = false;
lblMessage1.Text = "پسوند مورد نظر پشتیبانی نمی گردد لطفاٌ پسوندJPEG BMP GIF را انتخاب نمایید";
break;
}
if (ext && (fuAvatarUser.PostedFile.ContentLength != 0))
{
string serverFileName = Path.GetFileName(fuAvatarUser.PostedFile.FileName) ;
string fullUploadPath = Path.Combine(uploadDirectory, serverFileName);
try
{
fuAvatarUser.PostedFile.SaveAs(fullUploadPath);
string PathFilename = "Uploads/" + serverFileName;
return PathFilename;
}
catch (Exception err)
{
lblMessage1.Text = err.Message;
return "";
}
}
return "";
}

mikhak_sefid
چهارشنبه 15 شهریور 1391, 22:57 عصر
من یه تکه کد نوشتم اما اجرا نمی کنه میشه علت رو بگید؟
// 1 get web path
Label1.Visible = true;
string path = Server.MapPath(".") + "\\userfile\\";


//2 get and check file extension
string[] validextension = { ".jpg", ".bmp", ".gif", ".jpeg", ".png", ".tif", ".tiff" };
string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile .FileName);
if (Array.IndexOf(validextension, ext.ToLower()) < 0)
{
Response.Write("قالب فایل ناشناخته است");
Label1.Text = "invalid file extension!";
return; //بخاطر وجود void
}
else
{
Label1.Text = " ";
}


//3 get and check file size
long size = FileUpload1.PostedFile.ContentLength;
size /= 1024; // convert byte to kb
if (size > 80)
{
Response.Write("اندازه فایل باید کمتر از 80 کیلوبایت باشد، لطفاً اندازه فایل را تغییر داده و مجدداً سعی نمایید");
Label1.Text = "file size must be <80 kb, please resize your file and try again";
return;
}


//4 get file name
string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);


//5 check file exist and if (true) generate new name
while (System.IO.File.Exists(path + filename))

filename = "0" + filename;



//6 save file to server
FileUpload1.SaveAs(path + filename);
Response.Write("فایل با موفقیت ارسال شد");
Label1.Text = "file uploaded!";

meisam12
پنج شنبه 16 شهریور 1391, 00:53 صبح
یعنی دستوری که می نویسید ارور داره؟

mikhak_sefid
پنج شنبه 16 شهریور 1391, 07:50 صبح
سلام
آره من از usercontrol استفاده کردم و برنامه upload رو تو اون نوشتم وقتی رو صفحه قرار می دم از قسمت FileUpload1.SaveAs(path + filename); ایراد می گیره.
در ضمن من میخوام این usercontrol رو بین فیلدهای detailview قرار بدم اما نمیشه یا باید قبل از detailview بزارم یا بعدش.
خواهش می کنم راهنماییم کنین
واقعاً نیازمندم
با تشگر فراوان

tsfrzdh
پنج شنبه 16 شهریور 1391, 09:46 صبح
با سلام خدمت جمع مهندسین
ببخشید من با کنترل detailview به صورت ویزاردی اطلاعات چند فیلد نام و فامیل و .... رو وارد db می کنم
برا قرار دادن عکس کاربر چکار کنم؟
چطوری عکس کاربر رو بفرستم توی db?
خیلی لازم دارم
خواهش می کنم کمکم کنید:ناراحت:

من برای ذخیره عکس ازاین کد استفاده میکنم و مشکلی ندارم. امتحانش کن....

string filename = FileUpload1.FileName;


if (FileUpload1.HasFile)
{

FileUpload1.SaveAs(Server.MapPath("~/image-news/") + filename);
}



q1 = "insert into news (title,newsid,description,date1,pictureurl,abstrac t)" + "values (N'" + TextBox1.Text + "','" + Label2.Text + "',N'" + freetextbox1.Text + "','" + Label1.Text + "','" + filename + "',N'" + txt_abs.Text + "')";
b.sqldata(q1);

mikhak_sefid
پنج شنبه 16 شهریور 1391, 10:05 صبح
سلام
فقط این کد رو بنویسم؟
از کنترل upload استفاده کنم یا نه؟

mikhak_sefid
پنج شنبه 16 شهریور 1391, 10:08 صبح
q1 = "insert into news (title,newsid,description,date1,pictureurl,abstrac t)" + "values (N'" + TextBox1.Text + "','" + Label2.Text + "',N'" + freetextbox1.Text + "','" + Label1.Text + "','" + filename + "',N'" + txt_abs.Text + "')";
b.sqldata(q1

این قسمت رو توضیح میدین؟
من از کنترل upload استفاده کردم
این texta رو دیگه لازم ندارم
در ضمن کل اتطلاعات پایگاه داده ام توسط detailview ذخیره میشن

tsfrzdh
پنج شنبه 16 شهریور 1391, 11:11 صبح
تو این کد از کنترل FileUpload استفاده شده.
اول در متغیر filename اسم فایل و مسیرش ذخیره میشه. عکسهاتون هم در پوشه image-news ذخیره خواهد شد.
اون خط هم دستور insert به جدول هستش که شما به جای pictureurl که نام ستون ذخیره آدرس عکس هست نام ستون خودتون رو قرار میدید.

mikhak_sefid
پنج شنبه 16 شهریور 1391, 18:55 عصر
سلام
به من که خطا میده
آخه مگه نباید اول db رو شناسایی کنه و بازش کنه بعد سوش کنه و در نهایت close؟
آخه برنامه شما که اینجوری نیست.
خواهش میکنم کمک کنید

fakhravari
پنج شنبه 16 شهریور 1391, 20:25 عصر
این همه پست برای یک سوال ساده.
private string UpPath;
private string pathImage;
private string ImageFileName;

public void uploadpic()
{

UpPath = Server.MapPath(@"../Img_Slider/");
if (!Directory.Exists(UpPath))
{
Directory.CreateDirectory(Server.MapPath(@"../Img_Slider/"));
}

pathImage = Server.MapPath(@"../Img_Slider/");
String[] validext = { ".jpg", ".jpeg", ".bmp", ".jpe", ".png", ".gif", ".tiff", ".tif", ".bmp" };
string ext = System.IO.Path.GetExtension(FileUpload1.PostedFile .FileName);
if (Array.IndexOf(validext, ext.ToLower()) < 0)
{
return;
}

ImageFileName = System.IO.Path.GetFileName(FileUpload1.FileName);

FileInfo TheFile = new FileInfo(Server.MapPath(@"../Img_Slider/") + ImageFileName);
if (TheFile.Exists)
{
File.Delete(Server.MapPath(@"../Img_Slider/") + ImageFileName);
}


FileUpload1.PostedFile.SaveAs(pathImage + ImageFileName);
}

hk_register
پنج شنبه 16 شهریور 1391, 22:44 عصر
سلام دوست عزیز
بهتر است مسیر عکس را در دیتابیس ذخیره کنی و خود عکس را فرضاً در پوشه upload سایتت ذخیره کنی.

private string getUrlImage()
{

bool ext = true;
string uploadDirectory;
uploadDirectory = Path.Combine(Request.PhysicalApplicationPath, "Uploads");
string extension = Path.GetExtension(fuAvatarUser.PostedFile.FileName );
switch (extension.ToLower())
{
case ".bmp":
case ".gif":
case ".jpg":
break;
default:
ext = false;
lblMessage1.Text = "پسوند مورد نظر پشتیبانی نمی گردد لطفاٌ پسوندJPEG BMP GIF را انتخاب نمایید";
break;
}
if (ext && (fuAvatarUser.PostedFile.ContentLength != 0))
{
string serverFileName = Path.GetFileName(fuAvatarUser.PostedFile.FileName) ;
string fullUploadPath = Path.Combine(uploadDirectory, serverFileName);
try
{
fuAvatarUser.PostedFile.SaveAs(fullUploadPath);
string PathFilename = "Uploads/" + serverFileName;
return PathFilename;
}
catch (Exception err)
{
lblMessage1.Text = err.Message;
return "";
}
}
return "";
}



**************************************************

اینطوری ضریب امنیت پایین نمیاد؟ البته با ذخیره عکس در خود دیتابیس هم حجمش بالا میره.

fakhravari
پنج شنبه 16 شهریور 1391, 23:02 عصر
**************************************************

اینطوری ضریب امنیت پایین نمیاد؟ البته با ذخیره عکس در خود دیتابیس هم حجمش بالا میره.

اون دیگه بحث امنیت.

اگر عکس ها کم است در همان دیتابیس ذخیره کن و گر نه روی سرور

tsfrzdh
جمعه 17 شهریور 1391, 20:35 عصر
سلام
به من که خطا میده
آخه مگه نباید اول db رو شناسایی کنه و بازش کنه بعد سوش کنه و در نهایت close؟
آخه برنامه شما که اینجوری نیست.
خواهش میکنم کمک کنید

این کدی که من گذاشتم برنامه نویسی چندلایه هست.
اصل جواب شما این تکه کده:


string filename = FileUpload1.FileName;


if (FileUpload1.HasFile)
{

FileUpload1.SaveAs(Server.MapPath("~/image-news/") + filename);
}

بعدش فقط میمونه اضافه کردن اسم و آدرس عکس به پایگاه داده که توی متغیر filename ذخیره شده
شما همون با روش خودت db رو شناسایی کن و باز کن و ...وقتی که به دستور insert رسیدی، متغیر filename رو در ستون pictuteurl ذخیره کن.

mikhak_sefid
جمعه 17 شهریور 1391, 21:20 عصر
از همه دوستان تشکر می کنم
این کد رو نوشتم درست شد
امیدوارم به درد بقیه بخوره
string filename = FileUpload1.FileName;
if (FileUpload1.HasFile)
{

FileUpload1.SaveAs(Server.MapPath("~/userfile/") + filename);
}

SqlConnection con1 = new SqlConnection(@"Data Source=MOLLASADRA-PC\MOLLASADRA;Initial Catalog=store;Integrated Security=True");
con1.Open();
String strquery = "insert into stockroom (brand_code,brand_name,deal,price,brand_model,comp any_name,sub_group,brand_comment,brand_pic)" + "values (N'" + Text1.Text + "',N'" + Text2.Text + "',N'" + Text3.Text + "',N'" + Text4.Text + "',N'" + Text5.Text + "',N'" + Text6.Text + "',N'" + Text7.Text + "',N'" + Text8.Text + "','" + filename + "')";
SqlCommand com1 = new SqlCommand(strquery, con1);
com1.ExecuteNonQuery();
con1.Close();