uploadAvisoAttachment überarbeitet
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
Imports System.Net
|
Imports System.Net
|
||||||
Imports System.Net.Http
|
Imports System.Net.Http
|
||||||
Imports System.Threading
|
Imports System.Threading
|
||||||
|
Imports System.Threading.Tasks
|
||||||
Imports System.Web.Http
|
Imports System.Web.Http
|
||||||
Imports System.Web.Http.Description
|
Imports System.Web.Http.Description
|
||||||
Imports Microsoft.Web.Http
|
Imports Microsoft.Web.Http
|
||||||
@@ -26,338 +27,250 @@ Namespace ApiController.Controllers
|
|||||||
<ApiVersion("1")>
|
<ApiVersion("1")>
|
||||||
<System.Web.Http.Route("api/v{version:apiVersion}/uploadAvisoAttachment")>
|
<System.Web.Http.Route("api/v{version:apiVersion}/uploadAvisoAttachment")>
|
||||||
<BasicAuthentication>
|
<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.TESTSYSTEM = False
|
||||||
VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.LOG
|
VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.LOG
|
||||||
|
|
||||||
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
Dim response As HttpResponseMessage
|
||||||
|
|
||||||
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"
|
|
||||||
|
|
||||||
Try
|
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 ip = Request.Properties("MS_HttpContext").Request.UserHostAddress()
|
||||||
|
|
||||||
'Dim bodyText
|
|
||||||
'Dim json
|
|
||||||
|
|
||||||
'If HttpContext.Current.Request.GetBufferedInputStream IsNot Nothing Then
|
Dim DS_name As String = ""
|
||||||
' Dim bodyStream As Stream = HttpContext.Current.Request.GetBufferedInputStream
|
Dim DS_Domain As String = ""
|
||||||
' Dim reader = New StreamReader(bodyStream)
|
Dim DS_pw As String = ""
|
||||||
' If bodyStream.CanRead Then
|
|
||||||
' bodyText = reader.ReadToEnd
|
|
||||||
|
|
||||||
' json = JsonConvert.DeserializeObject(bodyText)
|
If Not saveOnServer Then
|
||||||
|
Dim prog As String = "Datenarchiv"
|
||||||
' Else
|
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
||||||
' uploadAvisoAttachment = "STREAMREADER_ERR"
|
Dim isProductive As String = If(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "0", "1")
|
||||||
' Return uploadAvisoAttachment
|
Dim query As String = "SELECT TOP 1 * FROM tblAPIEinstellungen WHERE api_program='" & prog & "' and api_productive ='" & isProductive & "'"
|
||||||
' End If
|
Dim DSZugang As DataTable = SQL.loadDgvBySql(query, "ADMIN")
|
||||||
'Else
|
If DSZugang.Rows.Count = 0 Then
|
||||||
|
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Fehler beim Abrufen der Datenserver-Zugangsdaten.")
|
||||||
|
|
||||||
' 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")
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
' Zugang für Datenarchiv
|
||||||
|
DS_Domain = DSZugang.Rows(0).Item("api_url")
|
||||||
If sendungsId > 0 Then
|
DS_name = DSZugang.Rows(0).Item("api_user")
|
||||||
|
DS_pw = DSZugang.Rows(0).Item("api_password")
|
||||||
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")
|
|
||||||
End If
|
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
|
Catch ex As Exception
|
||||||
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine, System.Reflection.MethodInfo.GetCurrentMethod.Name)
|
||||||
uploadAvisoAttachmentErr = ex.Message & " " & ex.StackTrace
|
response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Ein unerwarteter Fehler ist aufgetreten.")
|
||||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
|
||||||
End Try
|
End Try
|
||||||
|
|
||||||
|
Return response
|
||||||
Return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, uploadAvisoAttachmentErr)
|
|
||||||
End Function
|
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")>
|
<ApiVersion("1")>
|
||||||
|
|||||||
Reference in New Issue
Block a user