From d5f96bc28dafcd5825dd9e6ade002537d7eacf84 Mon Sep 17 00:00:00 2001 From: "m.ilhan" Date: Tue, 12 Nov 2024 11:24:11 +0100 Subject: [PATCH] =?UTF-8?q?uploadAvisoAttachment=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AvisoController/AVISOController.vb | 537 ++++++++---------- 1 file changed, 225 insertions(+), 312 deletions(-) diff --git a/VERAG_REST_SERVER/Controllers/AvisoController/AVISOController.vb b/VERAG_REST_SERVER/Controllers/AvisoController/AVISOController.vb index c990310..d432f91 100644 --- a/VERAG_REST_SERVER/Controllers/AvisoController/AVISOController.vb +++ b/VERAG_REST_SERVER/Controllers/AvisoController/AVISOController.vb @@ -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 - 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() +