using System.Text; using GB5Shared.FileUpload; using Microsoft.AspNetCore.Mvc; namespace FrameworkSL.Controllers.FileUpload { [ApiController] [Route("api/receive/ariba")] public class AribaFileReceive : ControllerBase { private readonly FileStorage _store; public AribaFileReceive(FileStorage store) { _store = store; } [HttpPost] public async Task Receive() { var payloadId = Request.Headers["cXML-payloadID"].ToString(); if (string.IsNullOrWhiteSpace(payloadId)) payloadId = "no-payload-id"; // MULTIPART (cXML + PDF) if (Request.ContentType != null && Request.ContentType.StartsWith("multipart")) { var form = await Request.ReadFormAsync(); // cXML PART var cxml = form["cxml"].ToString(); if (!string.IsNullOrEmpty(cxml)) { var bytes = Encoding.UTF8.GetBytes(cxml); await _store.SaveAsync( new MemoryStream(bytes), $"{payloadId}.xml", "ariba" ); } // ATTACHMENT PART foreach (var file in form.Files) { await _store.SaveAsync( file.OpenReadStream(), file.FileName, "ariba" ); } } // RAW cXML else { using var reader = new StreamReader(Request.Body); var xml = await reader.ReadToEndAsync(); var bytes = Encoding.UTF8.GetBytes(xml); await _store.SaveAsync( new MemoryStream(bytes), $"{payloadId}.xml", "ariba" ); } return Content(SuccessCxml(payloadId), "text/xml"); } [NonAction] private string SuccessCxml(string payloadId) => $@" Received "; } }