Как вставить имя изображения в базу данных? - PullRequest
0 голосов
/ 19 апреля 2009

Мне удалось загрузить изображение и изменить его размер. Теперь я хочу вставить имя моего изображения в базу данных.

Я использую SQL Server. Таблица называется images и имеет два столбца, целое число imageid и imagename как string(invarchar(max)). Мне нужно, чтобы имя файла было сохранено в столбце imagename, а imageid должно быть идентификатором.

Вот код, который у меня есть:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Data.SqlClient
Imports System.Data
Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub btnupload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnupload.Click
        Response.Write("Done")
        If (IsPostBack) Then
            HandleUploadedFile()
        End If
    End Sub
    Private Sub HandleUploadedFile()
        ' get the root of the web site 
        Dim root As String = Server.MapPath("~/")

        ' clean up the path 
        If Not root.EndsWith("\") Then
            root += "\"
        End If

        ' make a folder to store the images in 
        Dim fileDirectory As String = root & "Images/"

        ' create the folder if it does not exist 
        If Not System.IO.Directory.Exists(fileDirectory) Then
            System.IO.Directory.CreateDirectory(fileDirectory)
        End If

        ' make a link to the new file 
        Dim link As String = "<a href='Images/{0}' target='_blank'>{1}</a>{2}{3}"

        ' loop through the file in the request 
        For i As Integer = 0 To Request.Files.Count - 1

            ' get the file instance 
            Dim fi As HttpPostedFile = Request.Files.[Get](i)

            ' create a byte array to store the file bytes 
            Dim fileBytes As Byte() = New Byte(fi.ContentLength - 1) {}

            ' fill the byte array 
            Using stream As System.IO.Stream = fi.InputStream
                stream.Read(fileBytes, 0, fi.ContentLength)
            End Using

            ' create a random file name 
            Dim fileName As String = Guid.NewGuid().ToString()

            ' write the original file to the file system 
            File.WriteAllBytes(fileDirectory + fileName & ".jpg", fileBytes)
            litText.Text += String.Format(link, fileName & ".jpg", fileName & " Original", "<br/>", "")

            ' write the resized file to the file system 
            File.WriteAllBytes(fileDirectory + fileName & "_small.jpg", ResizeImageFile(fileBytes, 100))
            litText.Text += String.Format(link, fileName & "_small.jpg", fileName & " Small", "<br/>", "<br/>")

            ' cleanup 
            litText.Visible = True
            fileBytes = Nothing
        Next
    End Sub
    Private Shared Function ResizeImageFile(ByVal imageFile As Byte(), ByVal targetSize As Integer) As Byte()
        Using oldImage As System.Drawing.Image = System.Drawing.Image.FromStream(New MemoryStream(imageFile))
            Dim newSize As Size = CalculateDimensions(oldImage.Size, targetSize)
            Using newImage As New Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)
                Using canvas As Graphics = Graphics.FromImage(newImage)
                    canvas.SmoothingMode = SmoothingMode.AntiAlias
                    canvas.InterpolationMode = InterpolationMode.HighQualityBicubic
                    canvas.PixelOffsetMode = PixelOffsetMode.HighQuality
                    canvas.DrawImage(oldImage, New Rectangle(New Point(0, 0), newSize))
                    Dim m As New MemoryStream()
                    newImage.Save(m, ImageFormat.Jpeg)
                    Return m.GetBuffer()
                End Using
            End Using
        End Using
    End Function
    Private Shared Function CalculateDimensions(ByVal oldSize As Size, ByVal targetSize As Integer) As Size
        Dim newSize As New Size()
        If oldSize.Height > oldSize.Width Then
            newSize.Width = CInt((oldSize.Width * (CSng(targetSize) / CSng(oldSize.Height))))
            newSize.Height = targetSize
        Else
            newSize.Width = targetSize
            newSize.Height = CInt((oldSize.Height * (CSng(targetSize) / CSng(oldSize.Width))))
        End If
        Return newSize
    End Function
End Class

1 Ответ

1 голос
/ 19 апреля 2009

Сначала вам нужно знать строку подключения. так как код ссылается на SQLClient, я предполагаю, что вы используете SQL Server, поэтому вы должны посмотреть здесь . Далее вы захотите использовать метод ExecuteNonQuery объекта SQLCommand. Я вставил образец ниже. Вы можете прочитать больше об объекте SQLCommand здесь . И этот сайт содержит инструкции по вставке.

Public Sub SaveNameInDatabase(ByVal fileName As String, ByVal connectionString As String)
    Using connection As New SqlConnection(connectionString)
String query = String.format("INSERT INTO Files_Table (FileName) Values (\"{0}\")",fileName)
        Dim command As New SqlCommand(, connection)
        command.Connection.Open()
        command.ExecuteNonQuery()
    End Using
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...