uploadAvisoAttachment überarbeitet
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
Imports System.Net
|
||||
Imports System.Net.Http
|
||||
Imports System.Threading
|
||||
Imports System.Threading.Tasks
|
||||
Imports System.Web.Http
|
||||
Imports System.Web.Http.Description
|
||||
Imports Microsoft.Web.Http
|
||||
@@ -26,338 +27,250 @@ Namespace ApiController.Controllers
|
||||
<ApiVersion("1")>
|
||||
<System.Web.Http.Route("api/v{version:apiVersion}/uploadAvisoAttachment")>
|
||||
<BasicAuthentication>
|
||||
Public Function uploadAvisoAttachment(anhangsart As String, arrayOfFiles() As String, Optional avisoId As Integer = -1, Optional sendungsId As Integer = -1, Optional saveOnServer As Boolean = False) As HttpResponseMessage
|
||||
Public Async Function uploadAvisoAttachment(anhangsart As String, arrayOfFiles() As String, Optional avisoId As Integer = -1, Optional sendungsId As Integer = -1, Optional saveOnServer As Boolean = False) As Task(Of HttpResponseMessage)
|
||||
' Globale Fehlerbehandlung einstellen
|
||||
VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False
|
||||
VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.LOG
|
||||
|
||||
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
||||
|
||||
Dim prog As String = ""
|
||||
Dim DSZugang As New DataTable
|
||||
Dim DS_Domain As String = ""
|
||||
Dim DS_name As String = ""
|
||||
Dim DS_pw As String = ""
|
||||
Dim uploadAvisoAttachmentErr As String = "ERR"
|
||||
Dim response As HttpResponseMessage
|
||||
|
||||
Try
|
||||
' Eingabevalidierung
|
||||
If String.IsNullOrWhiteSpace(anhangsart) Then
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Der Parameter 'anhangsart' darf nicht leer sein.")
|
||||
End If
|
||||
|
||||
If arrayOfFiles Is Nothing OrElse arrayOfFiles.Length = 0 Then
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Das 'arrayOfFiles' darf nicht leer sein.")
|
||||
End If
|
||||
|
||||
If avisoId <= 0 AndAlso sendungsId <= 0 Then
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Es muss entweder eine gültige 'avisoId' oder 'sendungsId' angegeben werden.")
|
||||
End If
|
||||
|
||||
|
||||
Dim ip = Request.Properties("MS_HttpContext").Request.UserHostAddress()
|
||||
|
||||
'Dim bodyText
|
||||
'Dim json
|
||||
|
||||
'If HttpContext.Current.Request.GetBufferedInputStream IsNot Nothing Then
|
||||
' Dim bodyStream As Stream = HttpContext.Current.Request.GetBufferedInputStream
|
||||
' Dim reader = New StreamReader(bodyStream)
|
||||
' If bodyStream.CanRead Then
|
||||
' bodyText = reader.ReadToEnd
|
||||
Dim DS_name As String = ""
|
||||
Dim DS_Domain As String = ""
|
||||
Dim DS_pw As String = ""
|
||||
|
||||
' json = JsonConvert.DeserializeObject(bodyText)
|
||||
|
||||
' Else
|
||||
' uploadAvisoAttachment = "STREAMREADER_ERR"
|
||||
' Return uploadAvisoAttachment
|
||||
' End If
|
||||
'Else
|
||||
|
||||
|
||||
' uploadAvisoAttachment = "UPLOAD_ERR"
|
||||
' Return uploadAvisoAttachment
|
||||
'End If
|
||||
|
||||
|
||||
If arrayOfFiles Is Nothing Then
|
||||
|
||||
uploadAvisoAttachmentErr = "FILESARRAY_NOTHING_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
|
||||
|
||||
End If
|
||||
|
||||
If arrayOfFiles.Length < 1 Then
|
||||
|
||||
uploadAvisoAttachmentErr = "FILESARRAY_EMPTY_ERR" & arrayOfFiles.ToString
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
|
||||
|
||||
End If
|
||||
|
||||
|
||||
If anhangsart <> "" Then ' AndAlso listOfImages IsNot Nothing AndAlso listOfImages.Count > 0
|
||||
|
||||
If Not saveOnServer Then
|
||||
prog = "Datenarchiv"
|
||||
DSZugang = SQL.loadDgvBySql("SELECT top(1) * FROM tblAPIEinstellungen WHERE api_program='" & prog & "' and api_productive ='" & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "0", "1") & "'", "ADMIN")
|
||||
If DSZugang.Rows.Count = 0 Then
|
||||
uploadAvisoAttachmentErr = "LOGIN_DS_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
|
||||
'Zugang für Datenarchiv
|
||||
DS_Domain = DSZugang.Rows(0).Item("api_url")
|
||||
DS_name = DSZugang.Rows(0).Item("api_user")
|
||||
DS_pw = DSZugang.Rows(0).Item("api_password")
|
||||
If Not saveOnServer Then
|
||||
Dim prog As String = "Datenarchiv"
|
||||
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
||||
Dim isProductive As String = If(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "0", "1")
|
||||
Dim query As String = "SELECT TOP 1 * FROM tblAPIEinstellungen WHERE api_program='" & prog & "' and api_productive ='" & isProductive & "'"
|
||||
Dim DSZugang As DataTable = SQL.loadDgvBySql(query, "ADMIN")
|
||||
If DSZugang.Rows.Count = 0 Then
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Fehler beim Abrufen der Datenserver-Zugangsdaten.")
|
||||
End If
|
||||
|
||||
|
||||
|
||||
If sendungsId > 0 Then
|
||||
|
||||
Dim SENDUNG = New VERAG_PROG_ALLGEMEIN.cSendungen(sendungsId)
|
||||
If SENDUNG Is Nothing Then
|
||||
uploadAvisoAttachmentErr = "NO_SENDUNG_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
|
||||
|
||||
Else
|
||||
|
||||
If Not saveOnServer Then
|
||||
'wenn bereits offen, dann wareten
|
||||
For i = 0 To 20
|
||||
If Not NetzwerkVerbindungOffen(DS_name, DS_Domain) Then Exit For
|
||||
Thread.Sleep(1000)
|
||||
i = i + 1
|
||||
If i = 10 AndAlso NetzwerkVerbindungOffen(DS_name, DS_Domain) Then
|
||||
uploadAvisoAttachmentErr = "NO_NEW_DS_CONNECTION_ERR"
|
||||
Return Request.CreateErrorResponse(600, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
Next
|
||||
|
||||
|
||||
|
||||
NetzwerkVerbindungHerstellen(DS_Domain, DS_name, DS_pw)
|
||||
End If
|
||||
|
||||
For Each image In arrayOfFiles
|
||||
Dim filetemp = image.Replace("data:application/pdf;base64,", "")
|
||||
|
||||
Try
|
||||
Convert.FromBase64String(filetemp)
|
||||
Catch ex As Exception
|
||||
uploadAvisoAttachmentErr = "BASE64_FORMAT_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End Try
|
||||
|
||||
Dim fileextension = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getFileExtensionFromBase64String(filetemp)
|
||||
|
||||
'If fileextension.ToLower = "unknown" Then
|
||||
' uploadAvisoAttachment = "UNKNOWN_ATTACHMENT_EXTENSION_ERR"
|
||||
' Return uploadAvisoAttachment
|
||||
'End If
|
||||
|
||||
If Not saveOnServer Then
|
||||
|
||||
|
||||
|
||||
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "AVISO_ANHAENGE", SENDUNG.tblSnd_AvisoID, Now.ToString("ddMMyy_HHmmss.ffff"), "", anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"), False)
|
||||
DS.uploadDataToDATENSERVER_fromBase64String(filetemp, DS.da_name, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), False, False)
|
||||
|
||||
If DS Is Nothing AndAlso DS.da_id Is Nothing AndAlso DS.da_id <= 0 Then
|
||||
uploadAvisoAttachmentErr = "UPLOAD_DS_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
Dim fileName = DS.da_name
|
||||
Dim destPath = DS.GET_TOP1_PATH
|
||||
fileName = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(fileName)
|
||||
If destPath <> "" Then
|
||||
Dim fi As New FileInfo(destPath)
|
||||
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(SENDUNG.tblSnd_AvisoID, fileName, DS.da_id, anhangsart, fi.Extension, sendungsId,, fi.Length,)
|
||||
If Not ANH.SAVE Then
|
||||
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
Else
|
||||
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(SENDUNG.tblSnd_AvisoID, fileName, DS.da_id, anhangsart, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), sendungsId,, 100,)
|
||||
If Not ANH.SAVE Then
|
||||
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
|
||||
Else
|
||||
Try
|
||||
|
||||
Dim TMP_PATH = ""
|
||||
|
||||
If Environment.GetFolderPath(Environment.SpecialFolder.Personal) = "" Then ' WEB_SERV
|
||||
TMP_PATH = "G:\temp\Verag\DatenTMP\SENDUNGSID\"
|
||||
Else
|
||||
TMP_PATH = Path.GetTempPath() & "\VERAG\DatenTMP\"
|
||||
End If
|
||||
|
||||
TMP_PATH = TMP_PATH.Replace("\\", "\")
|
||||
If Not My.Computer.FileSystem.DirectoryExists(TMP_PATH) Then
|
||||
My.Computer.FileSystem.CreateDirectory(TMP_PATH)
|
||||
End If
|
||||
|
||||
Dim name = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(sendungsId & "_" & anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"))
|
||||
name = name.Replace("?", "")
|
||||
|
||||
|
||||
Dim extension = IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg")
|
||||
|
||||
Dim destPath = TMP_PATH & name
|
||||
|
||||
While System.IO.File.Exists(destPath)
|
||||
destPath = TMP_PATH & name & "_" & Now.ToString("yyyyMMddHHmmssfff")
|
||||
End While
|
||||
|
||||
Dim bytes As Byte() = Convert.FromBase64String(filetemp)
|
||||
File.WriteAllBytes(destPath & extension, bytes)
|
||||
|
||||
Catch ex As Exception
|
||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||
uploadAvisoAttachmentErr = ex.Message & " " & ex.StackTrace
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End Try
|
||||
|
||||
End If
|
||||
|
||||
|
||||
|
||||
Next
|
||||
|
||||
If Not saveOnServer Then NetzwerkVerbindungTrennen(DS_Domain)
|
||||
|
||||
End If
|
||||
|
||||
ElseIf avisoId > 0 Then
|
||||
Dim AVISO = VERAG_PROG_ALLGEMEIN.cAviso.getAvisoById(avisoId)
|
||||
If AVISO Is Nothing Then
|
||||
uploadAvisoAttachmentErr = "NO_AVISO_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.NotFound, uploadAvisoAttachmentErr)
|
||||
Else
|
||||
|
||||
If Not saveOnServer Then
|
||||
|
||||
'wenn bereits offen, dann wareten
|
||||
For i = 0 To 20
|
||||
If Not NetzwerkVerbindungOffen(DS_name, DS_Domain) Then Exit For
|
||||
Thread.Sleep(1000)
|
||||
i = i + 1
|
||||
If i = 10 AndAlso NetzwerkVerbindungOffen(DS_name, DS_Domain) Then
|
||||
uploadAvisoAttachmentErr = "NO_NEW_DS_CONNECTION_ERR"
|
||||
Return Request.CreateErrorResponse(600, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
Next
|
||||
|
||||
NetzwerkVerbindungHerstellen(DS_Domain, DS_name, DS_pw)
|
||||
End If
|
||||
|
||||
For Each image In arrayOfFiles
|
||||
Dim filetemp = image.Replace("data:application/pdf;base64,", "")
|
||||
Try
|
||||
Convert.FromBase64String(filetemp)
|
||||
Catch ex As Exception
|
||||
uploadAvisoAttachmentErr = "BASE64_FORMAT_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End Try
|
||||
|
||||
|
||||
Dim fileextension = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getFileExtensionFromBase64String(filetemp)
|
||||
|
||||
'If fileextension.ToLower = "unknown" Then
|
||||
' uploadAvisoAttachment = "UNKNOWN_ATTACHMENT_EXTENSION_ERR"
|
||||
' Return uploadAvisoAttachment
|
||||
'End If
|
||||
|
||||
If Not saveOnServer Then
|
||||
|
||||
|
||||
|
||||
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "AVISO_ANHAENGE", avisoId, Now.ToString("ddMMyy_HHmmss.ffff"), "", anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"), False)
|
||||
DS.uploadDataToDATENSERVER_fromBase64String(filetemp, DS.da_name, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), False, False)
|
||||
|
||||
If DS Is Nothing AndAlso DS.da_id Is Nothing AndAlso DS.da_id <= 0 Then
|
||||
uploadAvisoAttachmentErr = "UPLOAD_DS_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
Dim fileName = DS.da_name
|
||||
Dim destPath = DS.GET_TOP1_PATH
|
||||
fileName = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(fileName)
|
||||
If destPath <> "" Then
|
||||
Dim fi As New FileInfo(destPath)
|
||||
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(avisoId, fileName, DS.da_id, anhangsart, fi.Extension, sendungsId,, fi.Length,)
|
||||
If Not ANH.SAVE Then
|
||||
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
Else
|
||||
Dim ANH As New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(avisoId, fileName, DS.da_id, anhangsart, IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg"), sendungsId,, 100,)
|
||||
If Not ANH.SAVE Then
|
||||
uploadAvisoAttachmentErr = "SAVE_ANH_ERR"
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
|
||||
Try
|
||||
|
||||
Dim TMP_PATH = ""
|
||||
|
||||
If Environment.GetFolderPath(Environment.SpecialFolder.Personal) = "" Then ' WEB_SERV
|
||||
TMP_PATH = "G:\temp\Verag\DatenTMP\AVISOID\"
|
||||
Else
|
||||
TMP_PATH = Path.GetTempPath() & "\VERAG\DatenTMP\"
|
||||
End If
|
||||
|
||||
|
||||
TMP_PATH = TMP_PATH.Replace("\\", "\")
|
||||
If Not My.Computer.FileSystem.DirectoryExists(TMP_PATH) Then
|
||||
My.Computer.FileSystem.CreateDirectory(TMP_PATH)
|
||||
End If
|
||||
|
||||
Dim name = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(avisoId & "_" & anhangsart & "_" & Now.ToString("ddMMyy_HHmmss"))
|
||||
name = name.Replace("?", "")
|
||||
|
||||
|
||||
Dim extension = IIf(fileextension.ToLower <> "unknown", "." & fileextension, "." & "jpg")
|
||||
|
||||
Dim destPath = TMP_PATH & name
|
||||
|
||||
|
||||
While System.IO.File.Exists(destPath)
|
||||
destPath = TMP_PATH & name & "_" & Now.ToString("yyyyMMddHHmmssfff")
|
||||
End While
|
||||
|
||||
Dim bytes As Byte() = Convert.FromBase64String(filetemp)
|
||||
File.WriteAllBytes(destPath & extension, bytes)
|
||||
|
||||
Catch ex As Exception
|
||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||
uploadAvisoAttachmentErr = ex.Message & " " & ex.StackTrace
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
End Try
|
||||
|
||||
|
||||
End If
|
||||
|
||||
Next
|
||||
|
||||
If Not saveOnServer Then NetzwerkVerbindungTrennen(DS_Domain)
|
||||
|
||||
End If
|
||||
|
||||
|
||||
Else
|
||||
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
|
||||
End If
|
||||
|
||||
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.OK, "DOCS HAS BEEN UPLOADED")
|
||||
' Zugang für Datenarchiv
|
||||
DS_Domain = DSZugang.Rows(0).Item("api_url")
|
||||
DS_name = DSZugang.Rows(0).Item("api_user")
|
||||
DS_pw = DSZugang.Rows(0).Item("api_password")
|
||||
End If
|
||||
|
||||
' Dateien verarbeiten
|
||||
Dim result As String = ""
|
||||
|
||||
If sendungsId > 0 Then
|
||||
result = Await ProcessFilesAsync(anhangsart, arrayOfFiles, sendungsId, True, saveOnServer, DS_name, DS_Domain, DS_pw)
|
||||
ElseIf avisoId > 0 Then
|
||||
result = Await ProcessFilesAsync(anhangsart, arrayOfFiles, avisoId, False, saveOnServer, DS_name, DS_Domain, DS_pw)
|
||||
Else
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Fehlerhafte Eingabeparameter.")
|
||||
End If
|
||||
|
||||
If result = "OK" Then
|
||||
response = Request.CreateResponse(HttpStatusCode.OK, "Die Dokumente wurden erfolgreich hochgeladen.")
|
||||
Else
|
||||
response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, result)
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||
uploadAvisoAttachmentErr = ex.Message & " " & ex.StackTrace
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Ein unerwarteter Fehler ist aufgetreten.")
|
||||
End Try
|
||||
|
||||
|
||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
||||
Return response
|
||||
End Function
|
||||
|
||||
Private Async Function ProcessFilesAsync(anhangsart As String, arrayOfFiles() As String, id As Integer, isSendung As Boolean, saveOnServer As Boolean, DS_name As String, DS_Domain As String, DS_pw As String) As Task(Of String)
|
||||
Try
|
||||
' Sendung oder Aviso laden
|
||||
Dim entity As Object = Nothing
|
||||
If isSendung Then
|
||||
entity = New VERAG_PROG_ALLGEMEIN.cSendungen(id)
|
||||
If entity Is Nothing Then
|
||||
Return "Die angegebene Sendung wurde nicht gefunden."
|
||||
End If
|
||||
Else
|
||||
entity = VERAG_PROG_ALLGEMEIN.cAviso.getAvisoById(id)
|
||||
If entity Is Nothing Then
|
||||
Return "Das angegebene Aviso wurde nicht gefunden."
|
||||
End If
|
||||
End If
|
||||
|
||||
' Netzwerkverbindung herstellen, falls erforderlich
|
||||
If Not saveOnServer Then
|
||||
Dim retries As Integer = 0
|
||||
While NetzwerkVerbindungOffen(DS_name, DS_Domain) AndAlso retries < 20
|
||||
If retries = 10 Then
|
||||
Return "Die Verbindung zum Datenserver konnte nicht hergestellt werden."
|
||||
End If
|
||||
Await Task.Delay(1000)
|
||||
retries += 1
|
||||
End While
|
||||
|
||||
|
||||
NetzwerkVerbindungHerstellen(DS_Domain, DS_name, DS_pw)
|
||||
End If
|
||||
|
||||
For Each image In arrayOfFiles
|
||||
Dim filetemp As String = RemoveBase64Prefix(image)
|
||||
|
||||
' Validierung des Base64-Formats
|
||||
If Not IsValidBase64String(filetemp) Then
|
||||
Return "Das Base64-Format der Datei ist ungültig."
|
||||
End If
|
||||
|
||||
' Dateierweiterung ermitteln
|
||||
Dim fileextension As String = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getFileExtensionFromBase64String(filetemp)
|
||||
If String.IsNullOrEmpty(fileextension) OrElse fileextension.ToLower() = "unknown" Then
|
||||
fileextension = "jpg"
|
||||
End If
|
||||
|
||||
If Not saveOnServer Then
|
||||
' Datei auf Datenserver hochladen
|
||||
Dim uploadResult As String = Await UploadFileToDataServerAsync(entity, id, isSendung, filetemp, fileextension, anhangsart)
|
||||
If uploadResult <> "OK" Then
|
||||
Return uploadResult
|
||||
End If
|
||||
Else
|
||||
' Datei direkt auf dem Server speichern
|
||||
Dim saveResult As String = Await SaveFileOnServerAsync(id, isSendung, filetemp, fileextension, anhangsart)
|
||||
If saveResult <> "OK" Then
|
||||
Return saveResult
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
|
||||
If Not saveOnServer Then
|
||||
NetzwerkVerbindungTrennen(DS_Domain)
|
||||
End If
|
||||
|
||||
Return "OK"
|
||||
|
||||
Catch ex As Exception
|
||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||
Return "Ein Fehler ist beim Verarbeiten der Dateien aufgetreten."
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Function RemoveBase64Prefix(base64String As String) As String
|
||||
If base64String.Contains("base64,") Then
|
||||
Return base64String.Substring(base64String.IndexOf("base64,") + 7)
|
||||
End If
|
||||
Return base64String
|
||||
End Function
|
||||
|
||||
Private Function IsValidBase64String(base64String As String) As Boolean
|
||||
Try
|
||||
Convert.FromBase64String(base64String)
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
Return False
|
||||
End Try
|
||||
|
||||
End Function
|
||||
|
||||
Private Async Function UploadFileToDataServerAsync(entity As Object, entityId As Integer, isSendung As Boolean, fileContent As String, fileExtension As String, anhangsart As String) As Task(Of String)
|
||||
Try
|
||||
' Create a new data server entry
|
||||
Dim dsCategory As String = "DOKUMENTE"
|
||||
Dim dsSubCategory As String = "AVISO_ANHAENGE"
|
||||
Dim dsName As String = $"{anhangsart}_{DateTime.Now:ddMMyy_HHmmss}"
|
||||
Dim dsFileName As String = $"{DateTime.Now:ddMMyy_HHmmss.ffff}"
|
||||
|
||||
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(dsCategory, dsSubCategory, entityId, dsFileName, "", dsName, False)
|
||||
DS.uploadDataToDATENSERVER_fromBase64String(fileContent, DS.da_name, $".{fileExtension}", False, False)
|
||||
|
||||
If DS Is Nothing OrElse DS.da_id <= 0 Then
|
||||
Return "Fehler beim Hochladen der Datei zum Datenserver."
|
||||
End If
|
||||
|
||||
' Anhangseintrag erstellen
|
||||
Dim fileName As String = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr(DS.da_name)
|
||||
Dim destPath As String = DS.GET_TOP1_PATH
|
||||
Dim fileSize As Long = 0
|
||||
|
||||
If Not String.IsNullOrEmpty(destPath) AndAlso File.Exists(destPath) Then
|
||||
Dim fi As New FileInfo(destPath)
|
||||
fileSize = fi.Length
|
||||
Else
|
||||
fileSize = 100 ' Standardgröße, falls Datei nicht gefunden
|
||||
End If
|
||||
|
||||
Dim ANH As VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge
|
||||
|
||||
If isSendung Then
|
||||
ANH = New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(entity.tblSnd_AvisoID, fileName, DS.da_id, anhangsart, $".{fileExtension}", entityId, , fileSize)
|
||||
Else
|
||||
ANH = New VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge(entityId, fileName, DS.da_id, anhangsart, $".{fileExtension}", , , fileSize)
|
||||
End If
|
||||
|
||||
If Not ANH.SAVE Then
|
||||
Return "Fehler beim Speichern des Anhangs in der Datenbank."
|
||||
End If
|
||||
|
||||
Return "OK"
|
||||
Catch ex As Exception
|
||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||
Return "Ein Fehler ist beim Hochladen der Datei zum Datenserver aufgetreten."
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Private Async Function SaveFileOnServerAsync(entityId As Integer, isSendung As Boolean, fileContent As String, fileExtension As String, anhangsart As String) As Task(Of String)
|
||||
Try
|
||||
Dim TMP_PATH As String = ""
|
||||
If Environment.GetFolderPath(Environment.SpecialFolder.Personal) = "" Then ' Webserver
|
||||
TMP_PATH = If(isSendung, "G:\temp\Verag\DatenTMP\SENDUNGSID\", "G:\temp\Verag\DatenTMP\AVISOID\")
|
||||
Else
|
||||
TMP_PATH = Path.GetTempPath() & "\VERAG\DatenTMP\"
|
||||
End If
|
||||
|
||||
TMP_PATH = TMP_PATH.Replace("\\", "\")
|
||||
If Not My.Computer.FileSystem.DirectoryExists(TMP_PATH) Then
|
||||
My.Computer.FileSystem.CreateDirectory(TMP_PATH)
|
||||
End If
|
||||
|
||||
Dim name As String = VERAG_PROG_ALLGEMEIN.cDATENSERVER.replaceInvalidCahr($"{entityId}_{anhangsart}_{Now:ddMMyy_HHmmss}").Replace("?", "")
|
||||
Dim extension As String = $".{fileExtension}"
|
||||
Dim destPath As String = TMP_PATH & name
|
||||
|
||||
' Sicherstellen, dass der Dateiname eindeutig ist
|
||||
Dim fileLock As New Object()
|
||||
SyncLock fileLock
|
||||
While File.Exists(destPath & extension)
|
||||
destPath = TMP_PATH & name & "_" & Now.ToString("yyyyMMddHHmmssfff")
|
||||
End While
|
||||
End SyncLock
|
||||
|
||||
Dim bytes As Byte() = Convert.FromBase64String(fileContent)
|
||||
Await Task.Run(Sub() File.WriteAllBytes(destPath & extension, bytes))
|
||||
|
||||
Return "OK"
|
||||
Catch ex As Exception
|
||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||
Return "Fehler beim Speichern der Datei auf dem Server."
|
||||
End Try
|
||||
End Function
|
||||
|
||||
|
||||
Private Shared fileLock As New Object()
|
||||
|
||||
|
||||
|
||||
<ApiVersion("1")>
|
||||
|
||||
Reference in New Issue
Block a user