PDA

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



mostafa_tak2000
جمعه 06 دی 1392, 17:07 عصر
سلام دوستان من فرمی برای ارسال مدارک درست کردم که کاربر یک باره فایلهارا ارسال کنه و در هنگام ارسال ظرفیت و پسوند فایل را چک میکنه و در صورت مشکل پیغام میده .در غیر اینصورت ذخیره سازی انجام میشه.
مشکل من این هست که وقتی در لیست یک فایل مشکل داشته باشد مرورگر قطع میشه و انگار سرور قطع شده و دوباره باید صفحه را رفرش کرد. نمیدونم مشکل کجاست تصاویر و کدهارا به شرح ذیل هست.

1 تصویر صفحه ارسال فایل تصاویر
114495

2- تصویر خطا
114496

3- کدهای ذخیره فایل تصاویر و ثبت در بانک اطلاعاتی

Protected Sub Buttonsend_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Buttonsend.Click
If fileupload1.FileName <> "" Then
Dim pic As Array
Dim pic2 As String
Dim idpic As String
idpic = Guid.NewGuid().ToString
If fileupload1.PostedFile.ContentLength / 1024 > 300 Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر عکس نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
Exit Sub
End If
pic = Split(fileupload1.FileName, ".")
Select Case Microsoft.VisualBasic.UCase(Microsoft.VisualBasic. Trim(pic(1).ToString))
Case "JPG" : Exit Select
Case "JPEG" : Exit Select
Case Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('پسوند های مجاز برای تصویر عکس jpg یا jpeg می باشد');", True)
Exit Sub
End Select
pic2 = Session("codmeli") + idpic + "." + pic(1)
fileupload1.SaveAs(Server.MapPath("~\Images\Imageuser\" + pic2))
cmd.Parameters.Clear()
cmd.CommandText = "update jobseeker set pic1=@pic1 where idmeli=@idmeli"
cmd.Parameters.AddWithValue("idmeli", codmeli)
cmd.Parameters.AddWithValue("pic1", pic2)
accon.Open()
cmd.ExecuteNonQuery()
accon.Close()
End If
'*******************************************
If fileupload2.FileName <> "" Then
Dim pic As Array
Dim pic2 As String
Dim idpic As String
idpic = Guid.NewGuid().ToString
If fileupload2.PostedFile.ContentLength / 1024 > 300 Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر شناسنامه نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
Exit Sub
End If
pic = Split(fileupload2.FileName, ".")
Select Case Microsoft.VisualBasic.UCase(Microsoft.VisualBasic. Trim(pic(1).ToString))
Case "JPG" : Exit Select
Case "JPEG" : Exit Select
Case Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('پسوند های مجاز برای تصویر شناسنامه jpg یا jpeg می باشد');", True)
Exit Sub
End Select
pic2 = codmeli + idpic + "." + pic(1)
fileupload2.SaveAs(Server.MapPath("~\Images\Imageuser\" + pic2))
cmd.Parameters.Clear()
cmd.CommandText = "update jobseeker set pic2=@pic2 where idmeli=@idmeli"
cmd.Parameters.AddWithValue("idmeli", codmeli)
cmd.Parameters.AddWithValue("pic2", pic2)
accon.Open()
cmd.ExecuteNonQuery()
accon.Close()
End If
'******************************************
If fileupload3.FileName <> "" Then
Dim pic As Array
Dim pic2 As String
Dim idpic As String
idpic = Guid.NewGuid().ToString
If fileupload3.PostedFile.ContentLength / 1024 > 300 Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر روی کارت ملی نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
Exit Sub
End If
pic = Split(fileupload3.FileName, ".")
Select Case Microsoft.VisualBasic.UCase(Microsoft.VisualBasic. Trim(pic(1).ToString))
Case "JPG" : Exit Select
Case "JPEG" : Exit Select
Case Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('پسوند های مجاز برای تصویر روی کارت ملی jpg یا jpeg می باشد');", True)
Exit Sub
End Select
pic2 = codmeli + idpic + "." + pic(1)
fileupload3.SaveAs(Server.MapPath("~\Images\Imageuser\" + pic2))
cmd.Parameters.Clear()
cmd.CommandText = "update jobseeker set pic3=@pic3 where idmeli=@idmeli"
cmd.Parameters.AddWithValue("idmeli", codmeli)
cmd.Parameters.AddWithValue("pic3", pic2)
accon.Open()
cmd.ExecuteNonQuery()
accon.Close()
End If
'*****************************************
If fileupload4.FileName <> "" Then
Dim pic As Array
Dim pic2 As String
Dim idpic As String
idpic = Guid.NewGuid().ToString
If fileupload4.PostedFile.ContentLength / 1024 > 300 Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر پشت کارملی نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
Exit Sub
End If
pic = Split(fileupload4.FileName, ".")
Select Case Microsoft.VisualBasic.UCase(Microsoft.VisualBasic. Trim(pic(1).ToString))
Case "JPG" : Exit Select
Case "JPEG" : Exit Select
Case Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('پسوند های مجاز برای تصویر پشت کارت ملی jpg یا jpeg می باشد');", True)
Exit Sub
End Select
pic2 = codmeli + idpic + "." + pic(1)
fileupload4.SaveAs(Server.MapPath("~\Images\Imageuser\" + pic2))
cmd.Parameters.Clear()
cmd.CommandText = "update jobseeker set pic4=@pic4 where idmeli=@idmeli"
cmd.Parameters.AddWithValue("idmeli", codmeli)
cmd.Parameters.AddWithValue("pic4", pic2)
accon.Open()
cmd.ExecuteNonQuery()
accon.Close()
End If
'********************************************
If fileupload5.FileName <> "" Then
Dim pic As Array
Dim pic2 As String
Dim idpic As String
idpic = Guid.NewGuid().ToString
If fileupload5.PostedFile.ContentLength / 1024 > 300 Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر پایان خدمت نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
Exit Sub
End If
pic = Split(fileupload5.FileName, ".")
Select Case Microsoft.VisualBasic.UCase(Microsoft.VisualBasic. Trim(pic(1).ToString))
Case "JPG" : Exit Select
Case "JPEG" : Exit Select
Case Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('پسوند های مجاز برای تصویر پایان خدمت jpg یا jpeg می باشد');", True)
Exit Sub
End Select
pic2 = codmeli + idpic + "." + pic(1)
fileupload5.SaveAs(Server.MapPath("~\Images\Imageuser\" + pic2))
cmd.Parameters.Clear()
cmd.CommandText = "update jobseeker set pic5=@pic5 where idmeli=@idmeli"
cmd.Parameters.AddWithValue("idmeli", codmeli)
cmd.Parameters.AddWithValue("pic5", pic2)
accon.Open()
cmd.ExecuteNonQuery()
accon.Close()
End If
'*****************************************
If fileupload6.FileName <> "" Then
Dim pic As Array
Dim pic2 As String
Dim idpic As String
idpic = Guid.NewGuid().ToString
If fileupload6.PostedFile.ContentLength / 1024 > 300 Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر مدرک تحصیلی نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
Exit Sub
End If
pic = Split(fileupload6.FileName, ".")
Select Case Microsoft.VisualBasic.UCase(Microsoft.VisualBasic. Trim(pic(1).ToString))
Case "JPG" : Exit Select
Case "JPEG" : Exit Select
Case Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('پسوند های مجاز برای تصویر مدرک تحصیلی jpg یا jpeg می باشد');", True)
Exit Sub
End Select
pic2 = codmeli + idpic + "." + pic(1)
fileupload6.SaveAs(Server.MapPath("~\Images\Imageuser\" + pic2))
cmd.Parameters.Clear()
cmd.CommandText = "update jobseeker set pic6=@pic6 where idmeli=@idmeli"
cmd.Parameters.AddWithValue("idmeli", codmeli)
cmd.Parameters.AddWithValue("pic6", pic2)
accon.Open()
cmd.ExecuteNonQuery()
accon.Close()
End If

Mani_rf
شنبه 07 دی 1392, 01:57 صبح
منطق کدی که نوشتی مشکل داره
تو این قسمت که نوشتی :
If fileupload1.PostedFile.ContentLength / 1024 > 300 Then
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر عکس نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
Exit Sub
End If
اگر حجم فایل اولی بزرگتر از 300ک باشه کلا میره بیرون و مابقی رو اجرا نمیکنه.
پیشنهاد:
اول این که پیغام رو تو بده IF و مابقی کد ها رو توی قسمت Else بنویس.
دوم این که سعی کن تو Event ها توی وب از Exit Sub استفاده نکنی و اگه واقعا لازمه که از متد بری بیرون از Return استفاده کن.
سوم این که کد ها رو خلاصه تر کن تا رفع عیب کردنشون ساده تر بشه.
اگرمن بودم شاید قسمت های مربوط به کنترل هر فایل رو اینطوری مینوشتم :

If fileupload1.FileName <> "" Then
Dim idpic As String = Guid.NewGuid().ToString
If fileupload1.PostedFile.ContentLength / 1024 < 300 Then
Dim Extention As String = fileupload1.FileName.Split(".").Last.Trim.ToUpper
If Extention = "JPG" Or Extention = "JPEG" Then
pic2 = Session("codmeli") + idpic + "." + pic(1)
fileupload1.SaveAs(Server.MapPath("~\Images\Imageu ser\" + pic2))
cmd.Parameters.Clear()
cmd.CommandText = "update jobseeker set pic1=@pic1 where idmeli=@idmeli"
cmd.Parameters.AddWithValue("idmeli", codmeli)
cmd.Parameters.AddWithValue("pic1", pic2)
accon.Open()
cmd.ExecuteNonQuery()
accon.Close()
Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('پسوند های مجاز برای تصویر عکس jpg یا jpeg می باشد');", True)
End If
Else
ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(), "alert('حجم فایل تصویر عکس نمی تواند بیشتر از 300 کیلوبایت باشد');", True)
End If
End If

البته حتما خودت اینو بهتر میدونی که اگر 4تا از فایل ها درست باشه و آخری مشکل دار همه رو آپلود میکنه و رکورد تو دیتابیس میندازه و رو آخری Error میده که کار از کار گذشته.
اگر قراره که همه فایل ها حتما آپلود بشن و ...
یا قبل از آپلود کردن و رکورد انداختن اول همه رو چک کن که اگر درست بود عملیات رو شروع کنی و یا این که از Transaction استفاده کن.

mostafa_tak2000
شنبه 07 دی 1392, 23:39 عصر
ممنون دوست عزیز .
کدهای شمارو خواندم فعلا تست نکردم ولی خلاصه و مفید بودند .