我正在使用此代码上传图片。我已将写入权限授予将存储图像的文件夹。以下是我的代码:
Dim con As New System.Data.SqlClient.SqlConnection("Data Source=Biplob-PC\SQLEXPRESS; database =a;Integrated Security=True")
Dim smemberid As Integer
Dim photoid As Integer
Sub bindphoto()
'What directory are we interested in?
Dim mycommand As New SqlCommand("SELECT * FROM Photo WHERE MemberID = '" & smemberid & "' ORDER BY PhotoID", con)
con.Open()
dlFileList.DataSource = mycommand.ExecuteReader
dlFileList.DataBind()
con.Close()
End Sub
Sub memberid()
Dim cmd As New SqlCommand("SELECT MemberID From Memberlist WHERE UserName = '" & Session("uName") & "'", con)
Dim r As SqlDataReader
con.Open()
r = cmd.ExecuteReader
If r.HasRows Then
r.Read()
smemberid = r("MemberID").ToString
End If
r.Close()
con.Close()
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
If flupload.HasFile = False Then
Label1.Text = "Please select a picture from your computer"
Exit Sub
End If
If flupload.FileName.GetType.ToString = "jpg" Then
Label1.Text = "Hurrey"
Exit Sub
End If
'Has the file been uploaded properly?
If Not flupload.PostedFile Is Nothing Then
'Save the filename if it has a filename and exists...
Dim imageToBeResized As System.Drawing.Image = System.Drawing.Image.FromStream(flupload.PostedFile.InputStream)
Dim imageHeight As Integer = imageToBeResized.Height
Dim imageWidth As Integer = imageToBeResized.Width
Dim maxHeight As Integer = 98
Dim maxWidth As Integer = 98
imageHeight = (imageHeight * maxWidth) / imageWidth
imageWidth = maxWidth
Try
If flupload.PostedFile.FileName.Trim().Length > 0 And _
flupload.PostedFile.ContentLength > 0 Then
photoid = (New Random).Next
Dim objstream As Stream = flupload.PostedFile.InputStream
Dim objimage As System.Drawing.Image = System.Drawing.Image.FromStream(objstream)
If objimage.RawFormat.Equals(ImageFormat.Gif) Or objimage.RawFormat.Equals(ImageFormat.Jpeg) Or objimage.RawFormat.Equals(ImageFormat.Png) Then
Dim strBaseDir As New DirectoryInfo((Request.PhysicalApplicationPath) + "images\gallery\")
If imageHeight > maxHeight Then
imageWidth = (imageWidth * maxHeight) / imageHeight
imageHeight = maxHeight
End If
Dim bitmap As New Bitmap(imageToBeResized, imageWidth, imageHeight)
Dim stream As System.IO.MemoryStream = New MemoryStream()
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg)
stream.Position = 0
Dim strFileName As String = _
Path.GetFileName(flupload.PostedFile.FileName)
bitmap.Save(((Request.PhysicalApplicationPath) + "images\gallery\thumbs\") & photoid & ".jpg")
bigimage()
'File has been saved!
Dim mycommand As New SqlCommand("Insert chairperson (memberid,name,period,achieve,imageurl,other) Values ( '" & smemberid & "','" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & photoid & "','" & TextBox4.Text & "' )", con)
con.Open()
mycommand.ExecuteNonQuery()
con.Close()
Label1.Text = "File has been successfully uploaded"
Else
Label1.Text = "Sorry, File format not supported."
End If
End If
Catch ex As Exception
Label1.Text = ex.Message
End Try
Else
Label1.Text = "<hr /><p>Enter a filename to upload!"
End If
End Sub
Sub bigimage()
Dim imageToBeResized As System.Drawing.Image = System.Drawing.Image.FromStream(flupload.PostedFile.InputStream)
Dim imageHeight As Integer = imageToBeResized.Height
Dim imageWidth As Integer = imageToBeResized.Width
Dim maxHeight As Integer = 450
Dim maxWidth As Integer = 450
imageHeight = (imageHeight * maxWidth) / imageWidth
imageWidth = maxWidth
Dim objstream As Stream = flupload.PostedFile.InputStream
Dim objimage As System.Drawing.Image = System.Drawing.Image.FromStream(objstream)
If objimage.RawFormat.Equals(ImageFormat.Gif) Or objimage.RawFormat.Equals(ImageFormat.Jpeg) Or objimage.RawFormat.Equals(ImageFormat.Png) Then
Dim strBaseDir As New DirectoryInfo((Request.PhysicalApplicationPath) + "images\gallery\")
If imageHeight > maxHeight Then
imageWidth = (imageWidth * maxHeight) / imageHeight
imageHeight = maxHeight
End If
Dim bitmap As New Bitmap(imageToBeResized, imageWidth, imageHeight)
Dim stream As System.IO.MemoryStream = New MemoryStream()
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg)
stream.Position = 0
Dim strFileName As String = _
Path.GetFileName(flupload.PostedFile.FileName)
bitmap.Save(((Request.PhysicalApplicationPath) + "images\gallery\") & photoid & ".jpg")
End If
End Sub
Sub deleteg(ByVal s As Object, ByVal f As DataListCommandEventArgs)
Dim photographid As String
photographid = dlFileList.DataKeys.Item(f.Item.ItemIndex).ToString
Dim mycommand As New SqlCommand("DELETE FROM Photo WHERE PhotoID = '" & photographid & "'", con)
con.Open()
mycommand.ExecuteNonQuery()
con.Close()
bindphoto()
Label1.Text = "File has been deleted succefully"
End Sub
答案 0 :(得分:0)
一般错误是什么意思?
无论如何,我发现按钮点击事件有几个问题:
If flupload.FileName.GetType.ToString = "jpg" Then
Label1.Text = "Hurrey"
Exit Sub
End If
语句flupload.FileName.GetType.toString = "jpg"
甚至不应该编译。 GetType()
返回对象的类型(在本例中为System.String)。
如果它甚至编译,那么无论FileName是什么,语句总是会失败。我想你要找的是:
If flupload.FileName.EndsWith("jpg") Then
我不确定为什么你要通过按钮点击的其余事件处理程序中的所有排列,因为保存文件应该像调用flupload.SaveAs(<path>)
一样简单。
此外,您使用以下代码将您的应用程序暴露给SQL注入攻击:
Dim mycommand As New SqlCommand("Insert chairperson (memberid,name,period,achieve,imageurl,other) Values ( '" & smemberid & "','" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & photoid & "','" & TextBox4.Text & "' )", con)
您应该使用参数化查询。
阅读(彻底)FileUpload Class - 它包含您开始所需的一切,并且还有示例代码。
答案 1 :(得分:0)
这个错误可能是由许多事情引起的。
我收到此错误消息几次,每次都是因为权限问题或因为我在文件夹的拼写错误或写入的文件夹无法找到。确保也可以写入子目录,并且正确的进程可以访问该文件夹。如果你调试代码在哪里发生异常?
您可能还想查看A generic error occurred in GDI+以查看其他内容。