public IActionResult ImportFile(IFormFile file) { _logger.LogInfo("New file import request accepted"); if (file == null || file.Length == 0) { _logger.LogInfo("Invalid file (null or empty)"); return(BadRequest(new ImportResponse(null, "File is invalid."))); } string session = DateTime.Now.ToString("yyyyMMddHHmmss"); ImportStateService.SetInitialized(session); ImportResponse resp = new ImportResponse(session, "OK"); // string dir = _service.GetSavingDirectory() + session + "/"; if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } string path = dir + file.FileName; using (var fileStream = new FileStream(path, FileMode.Create)) { file.CopyTo(fileStream); } // Task.Run(() => ImportAsync(session, dir, file.FileName)); return(Ok(resp)); }
public async Task <IActionResult> GetImportStatus(string session) { ImportStateResponse resp = ImportStateService.Get(session); // cache if (resp == null) { FileInformation fileInfo = await _service.GetFileInfo(session); // DB if (fileInfo == null) { return(NotFound()); } return(Ok(new ImportStateResponse(fileInfo.FinalState))); } return(Ok(resp)); }
/* Reads file from temp dir and imports to disk and DB */ private async Task ImportAsync(string session, string dir, string fileName) { List <StoreItemDto> fileContent = new List <StoreItemDto>(); StoreItemDto item; string[] line; try { FileStream fileStream = new FileStream(dir + fileName, FileMode.Open); using (var reader = new StreamReader(fileStream)) { ImportStateService.SetReading(session); await reader.ReadLineAsync(); while (reader.Peek() >= 0) { line = (await reader.ReadLineAsync()).Split(','); item = new StoreItemDto { Key = line[0], ArtikelCode = line[1], ColorCode = line[2], Description = line[3], Price = decimal.Parse(line[4]), DiscountPrice = decimal.Parse(line[5]), DeliveredIn = line[6], Q1 = line[7], Size = line[8], Color = line[9] }; fileContent.Add(item); } } // Save data to DB and disk await _service.SaveData(session, fileContent, fileName); await _service.SaveFileInfo(session, fileContent.Count, fileName, ImportState.Completed, "save successed"); // delete directory which csv file is in it DirectoryInfo di = new DirectoryInfo(dir); foreach (FileInfo file in di.EnumerateFiles()) { file.Delete(); } Directory.Delete(dir); ImportStateService.SetProgress(session, ImportState.Completed, 100); _logger.LogInfo("File Imported Successfully"); } catch (Exception ex) { _logger.LogError("ERROR! : " + ex.StackTrace); await _service.SaveFileInfo(session, fileContent.Count, fileName, ImportState.Failed, ex.Message); ImportStateService.SetFailed(session, ex.Message); } }