2010-10-18 102 views
2

我正在做一个上传图片的测试,我发现当我上传图片超过2000px时,网页变得很慢。我希望用户上传大小不超过600像素,高度不超过700像素的照片。上传jpg/png/gif图片

进口System.Data 进口System.IO 进口System.Data.SqlClient的

偏类PhotoAdmin_Default 继承System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    UserIdValue.Text = Membership.GetUser().ProviderUserKey.ToString() 
    cannotUploadImageMessage.Visible = False 

End Sub 


Protected Sub dvPictureInsert_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dvPictureInsert.ItemInserted 
    'If the record was successfully inserted, save the picture 
    If e.AffectedRows > 0 Then 
     'Determine the maximum pictureID for this user 
     Dim results As DataView = 
      CType(maxPictureIDDataSource.Select(DataSourceSelectArguments.Empty), 
       DataView) 

     Dim pictureIDJustAdded As Integer = CType(results(0)(0), Integer) 

     'Reference the FileUpload control 
     Dim imageUpload As FileUpload = 
      CType(dvPictureInsert.FindControl("imageUpload"), FileUpload) 

     If imageUpload.HasFile Then 
      Dim baseDirectory As String = Server.MapPath("~/UploadedImages/") 

      imageUpload.SaveAs(baseDirectory & pictureIDJustAdded & ".jpg") 
     End If 

    End If 

    If e.Exception Is Nothing Then 

     ' Use the AffectedRows property to determine whether the 
     ' record was inserted. Sometimes an error might occur that 
     ' does not raise an exception, but prevents the insert 
     ' operation from completing. 
     If e.AffectedRows = 1 Then 

      MessageLabel.Text = "Record inserted successfully." 

     Else 

      MessageLabel.Text = "An error occurred during the insert operation." 

      ' Use the KeepInInsertMode property to remain in insert mode 
      ' when an error occurs during the insert operation. 
      e.KeepInInsertMode = True 

     End If 

    Else 

     ' Insert the code to handle the exception. 
     MessageLabel.Text = e.Exception.Message 

     ' Use the ExceptionHandled property to indicate that the 
     ' exception has already been handled. 
     e.ExceptionHandled = True 
     e.KeepInInsertMode = True 

    End If 

End Sub 



Protected Sub dvPictureInsert_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dvPictureInsert.ItemInserting 
    Dim cancelInsert As Boolean = False 


    Dim imageUpload As FileUpload = 
     CType(dvPictureInsert.FindControl("imageUpload"), FileUpload) 

    If Not imageUpload.HasFile Then 
     cancelInsert = True 
    Else 
     If Not imageUpload.FileName.ToUpper().EndsWith(".JPG") Then 
      cancelInsert = True 'Invalid image file! 

     End If 
    End If 

    If cancelInsert Then 
     e.Cancel = True 
     cannotUploadImageMessage.Visible = True 
    End If 

    'Set the UserId value to the currently logged on user's ID 
    e.Values("UserId") = Membership.GetUser().ProviderUserKey 

    'Set the UploadedOn value to the current date/time 
    e.Values("UploadedOn") = DateTime.Now 
End Sub 

Protected Sub gvPictures_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles gvPictures.RowDeleted 
    Dim baseDirectory As String = Server.MapPath("~/UploadedImages/") 
    Dim fileName As String = baseDirectory & 
     e.Keys("PictureID") & ".jpg" 
    File.Delete(fileName) 
End Sub 

Protected Sub gvPictures_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvPictures.RowUpdating 
    e.NewValues("UserId") = Membership.GetUser().ProviderUserKey 
End Sub 

末级

回答

1

很抱歉,如果我的VB是错误的,因为IM C#的家伙! !但我希望这应该给你一个指导。我在c#中做类似的事情。祝你好运

Protected Sub dvPictureInsert_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dvPictureInsert.ItemInserting 
    Dim cancelInsert As Boolean = False 


    Dim imageUpload As FileUpload = 
     CType(dvPictureInsert.FindControl("imageUpload"), FileUpload) 

    If Not imageUpload.HasFile Then 
     cancelInsert = True 
    Else 
     If Not imageUpload.FileName.ToUpper().EndsWith(".JPG") Then 
      cancelInsert = True 'Invalid image file! 
     Else 
      Dim image As System.Drawing.Image = 
       System.Drawing.Image.FromStream(imageUpload.PostedFile.InputStream) 
      If image.Width > 600 Or image.Height > 700 Then 
       cancelInsert = True 
      End If 
     End If 
    End If 

    //etc 
+0

非常感谢你,我的问题现在回答了。现在我只能添加jpg,你能帮我添加gif和png文件扩展名到代码吗? – onfire4JesusCollins 2010-10-18 10:31:10

2

设置上传的图片上的最大宽度和高度不一定能解决您的问题,因为您可以上传具有更高DPI的图片,并且它仍然是一个带有sma的“大”图片尺寸。此外,您必须在图像上传到服务器后检查图像尺寸。

你可以使用maxRequestLength属性,它可以用来防止一个大的文件被上传设置在web.config一个maxiumum文件大小......