В приложении, над которым я работаю, мне нужно изменить размер изображения и добавить его в базу данных. Я реализовал что-то для этого, но у меня проблема с сохранением результирующего файла BMP в потоке памяти, чтобы моя реализация работала сСуществующий код. Также источником моего изображения является переменная fu (File upload object). Мне также было интересно, можно ли использовать для доступа к источнику файла fu.name или fu.Filecontents.Также я приложил то, что я реализовал в начале моей реализации и в конце моей реализации, поскольку другой код был выполнен коллегой, которого больше нет со мной.
Вот код:
Public Function UploadFile(fu As FileUpload, expID As Integer) As Integer
GetConnectionString()
Dim con As New SqlConnection(connString.ConnectionString)
Dim dataAdapter As New SqlDataAdapter
Dim myCommandBuilder As SqlCommandBuilder
Dim dataSet As New DataSet
Dim memoryStream As MemoryStream
Dim bData As Byte()
Dim reader As BinaryReader
Dim expense As New Expense(expID)
Dim loggedInUser As New Employee(Membership.GetUser.UserName)
Try
UploadFile = 1
'check that the logged in user has the right to attach a file to the current expense
If loggedInUser.ID = expense.Rpt.Emp.ID Or loggedInUser.ID = expense.Rpt.Emp.Supervisor Or loggedInUser.ID = expense.Rpt.Emp.Finalizer Or loggedInUser.ID = expense.Rpt.Emp.DelegatedTo Then
If fu.HasFile Then
If fu.FileContent.Length < 5000000 Then
dataAdapter = New SqlDataAdapter("SELECT * FROM tblExpense WHERE EXPENSE_ID=" & expID, con)
myCommandBuilder = New SqlCommandBuilder(dataAdapter)
dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
con.Open()
dataAdapter.Fill(dataSet, "tblExpense")
'Begining of my implementation
' Get the scale factor.
Dim scale_factor As Single = Single.Parse(0.33)
' Get the source bitmap.
Dim bm_source As New Bitmap(fu.FileContent)
' Make a bitmap for the result.
Dim bm_dest As New Bitmap(
CInt(bm_source.Width * scale_factor),
CInt(bm_source.Height * scale_factor))
' Make a Graphics object for the result Bitmap.
Dim gr_dest As Graphics = Graphics.FromImage(bm_dest)
' Copy the source image into the destination bitmap.
gr_dest.DrawImage(bm_source, 0, 0,
bm_dest.Width + 1,
bm_dest.Height + 1)
'Ending of my implementation
reader = New BinaryReader(fu.FileContent)
bData = reader.ReadBytes(reader.BaseStream.Length)
memoryStream = New MemoryStream(bData, 0, bData.Length)
memoryStream.Close()
dataSet.Tables("tblExpense").Rows(0)("RECEIPT") = bData
Select Case UCase(Right(fu.PostedFile.FileName, 3))
Case "JPG" : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "image/jpeg"
Case "PNG" : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "image/png"
Case "GIF" : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "image/gif"
Case "PDF" : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "application/pdf"
Case "TXT" : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "text/plain"
Case "HTM" : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "text/html"
Case "HTML" : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "text/html"
Case Else : dataSet.Tables("tblExpense").Rows(0)("RECEIPT_TYPE") = "image/jpeg"
End Select
dataSet.Tables("tblExpense").Rows(0)("RECEIPT_NAME") = expense.Rpt.Emp.EmpNum & "-" & expense.Rpt.Name & "-" & expense.ID
dataSet.Tables("tblExpense").Rows(0)("RECEIPT_DATE") = Now
dataAdapter.Update(dataSet, "tblExpense")
Else
UploadFile = 2