【发布时间】:2011-09-28 14:07:34
【问题描述】:
在 SQL 2005 数据库中保存图像文件时,我需要触发提交。
用户将上传他们的图片文件。
然后,我的应用程序将检查图像文件大小是否符合特定要求。
如果是这样,则将图像保存到字段为图像数据类型的表中。 (如果尺寸不符合要求,显示错误信息并退出子)。
问题是如果我将图像文件保存到数据库中,则值会正确保存(但是,我没有检查图像大小)。
如果我先检查图像文件大小,然后保存,保存的值已损坏(不正确)。
有没有一种方法可以检查文件大小,然后在代码隐藏中提交时保存文件?
我的代码如下:
Dim iRequiredImageHeight As Integer = 80
Dim iRequiredImageWidth As Integer = 280
Dim imgBytes(FileUpload1.PostedFile.InputStream.Length) As Byte
Dim stream As System.IO.Stream = FileUpload1.PostedFile.InputStream
stream.InitializeLifetimeService()
stream.Read(imgBytes, 0, imgBytes.Length)
Dim imgData As System.Drawing.Image = System.Drawing.Image.FromStream(stream)
Dim imgWidth As Integer = imgData.PhysicalDimension.Width
Dim imgHeight As Integer = imgData.PhysicalDimension.Height
If imgHeight > iRequiredImageHeight Or imgHeight > iRequiredImageWidth Then
lblLogoMessage.Text = "The image you have uploaded is " & imgHeight & "px height by " & imgWidth & "px width. <br/> Required image size is " & iRequiredImageHeight & "px height by " & iRequiredImageWidth & "px width. <br/> Please resize the image and try again."
lblLogoMessage.ForeColor = Drawing.Color.Red
lblLogoMessage.Visible = True
bLogoFit = False
Else
Dim LogoFile As String = FileUpload1.FileName.ToString.Trim
Dim FileBytes(FileUpload1.PostedFile.InputStream.Length) As Byte
FileUpload1.PostedFile.InputStream.Read(FileBytes, 0, FileBytes.Length)
Dim SQL As String = "update CorpLogo "
SQL += "set HeaderLogoName = @LogoFile, LogoImage = @LogoBytes "
SQL += " where isonum='100'"
Dim myConn As New SqlConnection(connString)
Dim SQLcmd As New SqlCommand(SQL, myConn)
SQLcmd.Parameters.AddWithValue("@LogoFile", LogoFile)
SQLcmd.Parameters.AddWithValue("@LogoBytes", FileBytes)
myConn.Open()
SQLcmd.ExecuteNonQuery()
myConn.Close()
End If
【问题讨论】:
-
为什么你的价值会被破坏?您是否以任何方式更改图像?
-
不,不以任何方式更改图像。
-
啊..你读了两次流..也许这就是问题???从来没有那样工作过……
-
是的,我正在阅读两次流。
-
好吧,就读一遍吧!!读两遍有什么意义?
标签: asp.net sql-server vb.net image