cudreg-saml2/Shared/ExportFieldValue.aspx.vb
2025-06-08 16:22:20 +07:00

227 lines
10 KiB
VB.net

Imports BaseClasses
Imports BaseClasses.Utils
Imports BaseClasses.Data
Namespace Persons
Partial Public Class ExportFieldValue
Inherits Persons.UI.BaseApplicationPage
#Region " Generated Code for Web Form Designer "
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
#End Region
Private Const ASSEMBLY_NAME As String = "Persons.Business"
Public Sub New()
MyBase.New()
End Sub
Public ReadOnly Property FieldId() As String
Get
Return Me.Decrypt(Me.Request.Params.Item("Field"))
End Get
End Property
Public ReadOnly Property FileName() As String
Get
Dim fn As String = Me.Request.Params.Item("FileName")
Try
' Try to decrypt
Return Me.Decrypt(fn)
Catch
' For backward compatibility we support unencrypted version as well
Return fn
End Try
End Get
End Property
Public ReadOnly Property RecordId() As String
Get
Return Me.Decrypt(Me.Request.Params.Item("Record"))
End Get
End Property
Public ReadOnly Property TableId() As String
Get
Dim tableName As String = Me.Request.Params.Item("Table")
If String.IsNullOrEmpty(tableName) Then Return ""
tableName = Me.Decrypt(tableName)
Return tableName
End Get
End Property
Public ReadOnly Property Offset() As Integer
Get
If Not IsNothing(Me.Request.Params.Item("Offset")) Then
Return CInt(Me.Request.Params.Item("Offset"))
Else
Return 0
End If
End Get
End Property
Public ReadOnly Property ImageHeight() As Integer
Get
If Not IsNothing(Me.Request.Params.Item("ImageHeight")) Then
Return CInt(Me.Request.Params.Item("ImageHeight"))
Else
Return 0
End If
End Get
End Property
Public ReadOnly Property ImageWidth() As Integer
Get
If Not IsNothing(Me.Request.Params.Item("ImageWidth")) Then
Return CInt(Me.Request.Params.Item("ImageWidth"))
Else
Return 0
End If
End Get
End Property
Public ReadOnly Property ImagePercentSize() As Double
Get
If Not IsNothing(Me.Request.Params.Item("ImagePercentSize")) Then
Return CDbl(Me.Request.Params.Item("ImagePercentSize"))
Else
Return 0.0
End If
End Get
End Property
' Handler for the Load event.
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Validate the URL params
If ((Len(BaseClasses.Utils.GetUrlParam(Me, "Table", True)) < 1) OrElse _
(Len(BaseClasses.Utils.GetUrlParam(Me, "Record", True)) < 1) OrElse _
(Len(BaseClasses.Utils.GetUrlParam(Me, "Field", True)) < 1) _
) Then
Return
End If
Me.DataBind() 'Always call DataBind, even on PostBacks.
Me.ExportData() 'Then export the data
End Sub
Protected Sub ExportData()
If String.IsNullOrEmpty(Me.TableId) Then
Return
End If
Try
Dim t As PrimaryKeyTable = DirectCast(DatabaseObjects.GetTableObject(Me.TableId), PrimaryKeyTable)
Dim rec As IRecord = t.GetRecordData(Me.RecordId, False)
If (Me.ImagePercentSize <> 100.0 AndAlso Not (Me.ImagePercentSize = 0.0)) OrElse Not (Me.ImageHeight = 0 OrElse Me.ImageWidth = 0) Then
' To display image with shrinking according to user specified height/width or ImagePercentSize
Dim fieldData As ColumnValue = MiscUtils.GetData(rec, _
t.TableDefinition.ColumnList.GetByAnyName(Me.FieldId) _
)
Dim binaryData() As Byte = MiscUtils.GetBinaryData(t.TableDefinition.ColumnList.GetByAnyName(Me.FieldId), _
fieldData)
If binaryData Is Nothing OrElse binaryData.Length = 0 Then
RegisterJScriptAlert(Me, "No Content", "Field " & Me.FieldId & " does not contain any binary data.", False, True)
Return
End If
Dim thumbNailSizeImage() As Byte = GetThumbNailSizeImage(binaryData)
Dim filName As String = MiscUtils.GetFileNameWithExtension(t.TableDefinition.ColumnList.GetByAnyName(Me.FieldId), _
binaryData, _
Nothing)
MiscUtils.SendToWriteResponse(Me.Response, _
thumbNailSizeImage, _
filName, _
t.TableDefinition.ColumnList.GetByAnyName(Me.FieldId), _
fieldData, _
Me.Offset)
Else
'Calling ExportFieldData method without image shrinking.
If Not MiscUtils.ExportFieldData( _
Me.Response, _
rec, _
t.TableDefinition.ColumnList.GetByAnyName(Me.FieldId), _
FileName, _
Me.Offset) Then
RegisterJScriptAlert(Me, "No Content", "Field " & Me.FieldId & " does not contain any binary data.", False, True)
End If
End If
Catch ex As Exception
End Try
End Sub
Protected Function GetThumbNailSizeImage(ByVal binaryData() As Byte) As Byte()
Dim ThumbNailBinaryData() As Byte = Nothing
Try
Dim TempMemStream As New System.IO.MemoryStream(binaryData)
Dim ImageObj As System.Drawing.Image
Dim ThumbSizeImageObj As System.Drawing.Image
ImageObj = System.Drawing.Image.FromStream(TempMemStream)
Dim temHeight As Integer
Dim temWidth As Integer
temHeight = ImageObj.Height
temWidth = ImageObj.Width
Dim TempFileStream As New System.IO.MemoryStream
'If Imagesize is less than 20*20 then return the original image
If (temWidth < 20 And temHeight < 20) Then
Dim ImageBinaryData() As Byte
Try
' load as raw format so that the image can have transparency is retained.
ImageObj.Save(TempFileStream, ImageObj.RawFormat)
Catch ex As Exception
' if exception happens which can be for .ico, then load as jpeg but transparency cannot be retained.
ImageObj.Save(TempFileStream, System.Drawing.Imaging.ImageFormat.Jpeg)
End Try
ImageBinaryData = New Byte(CType(TempFileStream.Length, Integer)) {}
ImageBinaryData = TempFileStream.ToArray()
Return ImageBinaryData
End If
Dim ImagePercentSize As Double = Me.ImagePercentSize
' If the ImagePercentSize is 0.2 then the actual percent calculation will result in generating
' temHeight and temWidth as Zero. When the height and width is zero, GetThumbnailImage()
' will generate image of arbitrary size. Hence the image will not display as predicted,
' ie, with size 0.2%. For this purpose, to maintain consistant image size, when ImagePercentSize
' is less than 1, it is taken as actual percentage for eg. when ImagePercentSize is 0.2, it is considered as 20%
' and image will displayed with 20% of original size.
If (Me.ImagePercentSize <= 1) Then
ImagePercentSize = Me.ImagePercentSize * 100
End If
'Actual percentage calculation. as ImagePercentSize value provided by client is a number not a percent
ImagePercentSize = ImagePercentSize / 100
temHeight = CInt(ImagePercentSize * temHeight)
temWidth = CInt(ImagePercentSize * temWidth)
'Create thumbnail size of the original Image ImageObj
If (Me.ImagePercentSize = 0.0) Then
ThumbSizeImageObj = ImageObj.GetThumbnailImage(Me.ImageWidth, Me.ImageHeight, Nothing, IntPtr.Zero)
Else
ThumbSizeImageObj = ImageObj.GetThumbnailImage(temWidth, temHeight, Nothing, IntPtr.Zero)
End If
Try
' load as raw format so that the image can have transparency is retained.
ThumbSizeImageObj.Save(TempFileStream, ImageObj.RawFormat)
Catch ex As Exception
' if exception happens which can be for .ico, then load as jpeg but transparency cannot be retained.
ThumbSizeImageObj.Save(TempFileStream, System.Drawing.Imaging.ImageFormat.Jpeg)
End Try
ThumbNailBinaryData = New Byte(CType(TempFileStream.Length, Integer)) {}
ThumbNailBinaryData = TempFileStream.ToArray()
Catch ex As Exception
End Try
Return ThumbNailBinaryData
End Function
'Since this is a "utility" page, do not log requests for it in the Session's Navigation History
Protected Overrides Sub UpdateSessionNavigationHistory()
'Do Nothing
End Sub
End Class
End Namespace