// Формируем модель файла документа private FileModelDTO CreateFilePath(DocumentCreateModel model) { var year = model.Year.ToString(); var contract = model.ContractNumber.ReplaceInvalidChars('-') ?? ""; var deviceType = model.DeviceType.ReplaceInvalidChars('-'); var deviceName = model.DeviceName.ReplaceInvalidChars('-'); var docType = model.DocumentType == DocumentType.Certificate ? "Свидетельства" : "Извещения о непригодности"; var extension = Path.GetExtension(model.DocumentFile?.FileName); var fileName = deviceType + "_" + deviceName + extension; var filePath = Path.Combine(year, contract, docType, fileName); var file = new FileModelDTO { Size = model.DocumentFile?.Length ?? 0, ContentType = model.DocumentFile?.ContentType, Path = filePath }; // Актуализируем путь к файлу file.Path = _fileService.ActualizeFilePath(file); file.FileName = Path.GetFileName(file.Path); return(file); }
public string ActualizeFilePath(FileModelDTO file) { var documentsFolderPath = _configuration.GetSection("Paths").GetSection("DocumentsFolder").Value; var filePath = Path.Combine(documentsFolderPath, file.Path); var fileFolder = Path.GetDirectoryName(filePath); var fileName = Path.GetFileNameWithoutExtension(filePath); var extension = Path.GetExtension(filePath); var i = 0; // Проверить существет ли файл с таким именем while (File.Exists(filePath)) { var fileInfo = new FileInfo(filePath); if (file.Size == fileInfo.Length) { return(filePath.Replace(documentsFolderPath, "")); } var newFileName = $"{fileName}_({i++})"; filePath = Path.Combine(fileFolder, newFileName + extension); } return(filePath.Replace(documentsFolderPath, "")); }
public JsonResult Post() { CustomResponse customResponse = new CustomResponse(); try { var fileStream = Request.Form.Files[0].OpenReadStream(); // For .net core, the next line requires the NuGet package, // System.Text.Encoding.CodePages System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); using (var reader = ExcelReaderFactory.CreateOpenXmlReader(fileStream)) { //DataSet - The result of each spreadsheet will be created in the result.Tables DataSet result = reader.AsDataSet(); //iterate on sheets foreach (DataTable table in result.Tables) { List <FileModelDTO> lst = new List <FileModelDTO>(); for (int i = 1; i < table.Rows.Count; i++) { FileModelDTO item = new FileModelDTO(); // read new row item.Key = table.Rows[i].ItemArray[0].ToString(); item.ItemCode = table.Rows[i].ItemArray[1].ToString(); item.ColorCode = table.Rows[i].ItemArray[2].ToString(); item.Description = table.Rows[i].ItemArray[3].ToString(); item.Price = table.Rows[i].ItemArray[4].ToString(); item.DiscountPrice = table.Rows[i].ItemArray[5].ToString(); item.DeliveredIn = table.Rows[i].ItemArray[6].ToString(); item.Q1 = table.Rows[i].ItemArray[7].ToString(); item.Size = table.Rows[i].ItemArray[8].ToString(); item.Color = table.Rows[i].ItemArray[9].ToString(); lst.Add(item); //this to not add all rows at one time but 100 row foreach database insert(if very big data) if (lst.Count() == 100) { _fileSaverService.AddNewFileData(lst); lst = new List <FileModelDTO>(); } } if (lst.Count() != 0) { _fileSaverService.AddNewFileData(lst); } } } customResponse.Message = "Success"; customResponse.StatusCode = 200; } catch (Exception ex) { customResponse.Message = ex.Message; customResponse.StatusCode = 500; } return(Json(customResponse)); }