using Step.Model.DTOModels; using Step.NC; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web.Http; using static CMS_CORE_Library.DataStructures; namespace Step.Controllers.WebApi { [RoutePrefix("api/file_manager")] public class NcFileController : ApiController { [Route("files"), HttpGet] public IHttpActionResult GetFileList(string filePath = "") { using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.GetFileList(filePath, out List fileList); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(fileList); } } [Route("file/info"), HttpGet] public IHttpActionResult GetFileInfo([FromUri]string filePath) { using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.GetFileInfo(filePath, out InfoFile fileInfo); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(fileInfo); } } [Route("file/active"), HttpPut] public IHttpActionResult SetActiveProgram([FromUri]string filePath) { using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.SetActiveProgramInfo(filePath, out DTOActiveProgramDataModel fileInfo); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(fileInfo); } } [Route("file/deactivate"), HttpPut] public IHttpActionResult DeactivateProgram() { using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.DeactivateProgram(out DTOActiveProgramDataModel fileInfo); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(fileInfo); } } [Route("upload"), HttpPost] public async Task AddAttachment() { // Check whether the POST operation is MultiPart? if (!Request.Content.IsMimeMultipartContent()) throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); // Create CustomMultipartFormDataStreamProvider CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider("C:\\CMS\\STEP\\"); // MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(MAINTENANCE_ATTACHMENT_PATH); List files = new List(); // Read all contents of multipart message into CustomMultipartFormDataStreamProvider. var result = await Request.Content.ReadAsMultipartAsync(provider); // Send OK Response along with saved file names to the client. return Ok(); } // Override MultipartFormDataStreamProvider to override the GetLocalFileName public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider { public CustomMultipartFormDataStreamProvider(string path) : base(path) { } public override string GetLocalFileName(HttpContentHeaders headers) { var fileName = headers.ContentDisposition.FileName.Replace("\"", string.Empty); return Path.GetFileNameWithoutExtension(fileName) + Guid.NewGuid() + Path.GetExtension(fileName); } } } }