uploadAvisoAttachment überarbeitet

This commit is contained in:
2024-11-12 11:24:11 +01:00
parent f6348fd3b2
commit d5f96bc28d

View File

@@ -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")>