Beispiel #1
0
        // Формируем модель файла документа
        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);
        }
Beispiel #2
0
        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));
        }