PDA

View Full Version : سوال: کنترل FileUpload



ashkan.890
سه شنبه 28 آبان 1392, 06:21 صبح
سلام من به کنترل FileUpload دارم که از طریق اون میخوام یک عکس تو دیتا بیس ذخیره بشه
آدرس عکس رو از کدوم خاصیت FileUpload میتونم بگیرم؟؟؟

و به نظرتون دیتا تایپ فیلد این عکس image باشه بهتره یا VarBinary؟
سوال دومم مربوط به این تالار نیست ببخشید
ولی تو تتالار sql گذاشتم جواب خوبی نگرفتم :ناراحت:

no0rin_66
سه شنبه 28 آبان 1392, 08:35 صبح
http://asp.net-tutorials.com/controls/file-upload-control/

no0rin_66
سه شنبه 28 آبان 1392, 08:36 صبح
بهتره است VarBinary

ashkan.890
سه شنبه 28 آبان 1392, 08:46 صبح
بهتره است VarBinary
ممنون از جوابتون
ببخشید Varbinery چه جوری باید پر کنم ؟؟
من هرچی تو فیلدش به صورت دستی مینویسم error میده

saeed31641
سه شنبه 28 آبان 1392, 09:15 صبح
بهتر varbimary باشه چون شما خود عکس داخل بانک ذخیره میکنی .اگه ادرس باشه باید باز جایی تو پروژه عکساتو اضافه کنی امنیتش کمترهاینم کدش تو بانک


string imgFileName = "";
if (FileUploadPic.FileName.Length == 0)
this.modalEmptyPic.Show();
else
{
imgFileName = FileUploadPic.FileName;
if ((System.IO.Path.GetExtension(imgFileName) == ".jpg") || (System.IO.Path.GetExtension(imgFileName) == ".bmp") || (System.IO.Path.GetExtension(imgFileName) == ".gif") || (System.IO.Path.GetExtension(imgFileName) == ".png"))
{
if (FileUploadPic.PostedFile.ContentLength < 100010)
{
HttpPostedFile postFile = FileUploadPic.PostedFile;
int contentLength = postFile.ContentLength;
img = new byte[contentLength];
postFile.InputStream.Read(img, 0, contentLength);
DataTable dtTemp = new DataTable("TempImage");
dtTemp.Columns.Add("Image", System.Type.GetType("System.Byte[]"));
DataRow dr = dtTemp.NewRow();
dr[0] = img;
Session["img"] = img;
dtTemp.Rows.Add(dr);
Session["dt"] = dtTemp;
ImUserEdit.ImageUrl = "~/Handler/IMAGE.aspx?id=0";
}
else
this.modalErrorSizePic.Show();
}
else
this.ModalInvalidFormPic.Show();
}


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

ashkan.890
سه شنبه 28 آبان 1392, 17:07 عصر
داداش مرسی از جوابت فقط من یکم گیج شدم :لبخند:
ببیم من تو یه صفحه به file upload و یه button دارم که وقتی روی button کلیک میشه باید این عکس تو دیتا بیس ذخیره شه
بعد تو صفحات دیگه باید این عکسا توی کنترل image نمایش داده شه
با توجه به این کاری که من میکنم امکانش هست یکم راهنماییم کنی؟؟
ممنونم:خجالت:

fakhravari
سه شنبه 28 آبان 1392, 18:28 عصر
http://stackoverflow.com/questions/21877/dynamically-rendering-aspimage-from-blob-entry-in-asp-net
یک Handler اد کن توی صفحه
public class ImageHandler : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
using(Image image = GetImage(context.Request.QueryString["ID"]))
{
context.Response.ContentType = "image/jpeg";
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
}

public bool IsReusable
{
get
{
return true;
}
}
}
برای خوندن کافی
<asp:Image runat="server" ImageUrl="~/Image.ashx?ID=myImageId" />

ashkan.890
سه شنبه 28 آبان 1392, 18:49 عصر
http://stackoverflow.com/questions/21877/dynamically-rendering-aspimage-from-blob-entry-in-asp-net
یک Handler اد کن توی صفحه
public class ImageHandler : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
using(Image image = GetImage(context.Request.QueryString["ID"]))
{
context.Response.ContentType = "image/jpeg";
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
}

public bool IsReusable
{
get
{
return true;
}
}
}
برای خوندن کافی
<asp:Image runat="server" ImageUrl="~/Image.ashx?ID=myImageId" />

کمک بزرگی بود مرسی

ashkan.890
سه شنبه 28 آبان 1392, 19:27 عصر
ببخشید بازم سوال میکنم
با این که توضیح خوبی دادید و رفرنس خوبی هم بهم دادید ولی بازم یه موضوع واسم گنگ

protected void Button2_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=(local);Initial Catalog=DB1;Integrated Security=True";
SqlConnection sql_conn = new SqlConnection(connectionString);
string commandText1 = "UPDATE Info SET Subject=@subject, Titr=@titr, Text=@text, Img=@img WHERE ID=1";
SqlCommand sql_comm = new SqlCommand(commandText1, sql_conn);
sql_comm.Parameters.AddWithValue("@subject", TextBox2.Text);
sql_comm.Parameters.AddWithValue("@titr", TextBox3.Text);
sql_comm.Parameters.AddWithValue("@text", TextBox4.Text);
sql_comm.Parameters.AddWithValue("@img", ##);
sql_conn.Open();

sql_comm.ExecuteNonQuery();

sql_conn.Close();

Response.Redirect("AdminPanel.aspx");
}

جای ## چی باید بزارم که تو دیتا بیس ام تصویری که از فایل آپلود گرفتم سیو بشه؟؟؟

fakhravari
سه شنبه 28 آبان 1392, 19:31 عصر
command.Parameters.Add("@Picture", SqlDbType.VarBinary).Value = picture;

ashkan.890
چهارشنبه 29 آبان 1392, 02:17 صبح
چرا وقتی این متد رو توی پروژه ی خودم استفاده میکنم ارور میده بهم
ولی وقتی به پروژه ی جدید ایجاد میکنم و از این متد استفاده میکنم ارور نمیده ؟

int len = FileUpload1.PostedFile.ContentLength;


namespace ها یکی بوده تو 2 تا پروژه
ارور هم اینه
{"Object reference not set to an instance of an object."}

fakhravari
چهارشنبه 29 آبان 1392, 16:16 عصر
byte[] input = new byte[fileLen - 1];
input = FileUpload1.FileBytes;

ashkan.890
چهارشنبه 29 آبان 1392, 23:57 عصر
protected void Button1_Click1(object sender, EventArgs e)
{
string connectionString2 = "Data Source=(local);Initial Catalog=DB1;Integrated Security=True";
SqlConnection sql_conn2 = new SqlConnection(connectionString2);
string commandText2 = "INSERT INTO Info (Subject,Titr,Text,Img)VALUES(@sub,@titr,@txt,@pic )";
SqlCommand sql_comm2 = new SqlCommand(commandText2, sql_conn2);
sql_comm2.Parameters.Clear();
sql_comm2.Parameters.AddWithValue("@sub", TextBox2.Text);
sql_comm2.Parameters.AddWithValue("@titr", TextBox3.Text);
sql_comm2.Parameters.AddWithValue("@txt", TextBox4.Text);


int len = Upload1.PostedFile.ContentLength;
byte[] pic = new byte[len - 1];
pic = Upload1.FileBytes;

Upload1.PostedFile.InputStream.Read(pic, 0, len);
sql_comm2.Parameters.AddWithValue("@pic", pic);
if (TextBox2.Text != "" & TextBox3.Text != "" & TextBox4.Text != "")
{
try
{
sql_conn2.Open();
sql_comm2.ExecuteNonQuery();
}
finally
{
sql_conn2.Close();
sql_comm2.Dispose();
sql_conn2.Dispose();
}
}
}


باز هم از

int len = FileUpload1.PostedFile.ContentLength;

ایراد میگیره :ناراحت:

fakhravari
پنج شنبه 30 آبان 1392, 15:11 عصر
command.Parameters.Add("@Picture", SqlDbType.VarBinary).Value = Upload1.FileBytes;