Проверка ExcelReaderFactory и бритвенных страниц, если правильный файл с использованием ExcelReader - PullRequest
0 голосов
/ 04 февраля 2019

Невозможно проверить, является ли файл правильным, код ломается, но файл проходит всегда.

    [BindProperty, Required(ErrorMessage = "Please select a file!"), Attachment]
        public IFormFile Upload { get; set; }
        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            if (Upload != null && Upload.Length > 0)
            {
                var myFile = Path.Combine(env.ContentRootPath, folderName, Upload.FileName);
                var fileExt = Path.GetExtension(Upload.FileName).Substring(1);

                if (!supportedTypes.Contains(fileExt))
                {
                    ModelState.AddModelError(string.Empty,
                        "Only Excel files are permited");
                }
                else
                {
                    if (myFile.Length > 0)
                    {
                        using (var fileStream = new FileStream(myFile, FileMode.Create))
                        {
                            await Upload.CopyToAsync(fileStream);
                            fileStream.Close();

                            var stream = System.IO.File.Open(myFile, FileMode.Open, FileAccess.Read);

                                using (var excelStream = ExcelReaderFactory.CreateReader(stream))
                                {
                                    AddExcelToDB(excelStream);
                                }

                        }
                    }
                }
            }
            else
            {
                ModelState.AddModelError(string.Empty, 
                    "Please, you must select a file");
            }

           return RedirectToPage("/Analises/Index");

        }

        private void AddExcelToDB(IExcelDataReader excelReader)
        {
            var excelTable = excelReader.AsDataSet().Tables[0];

            for (var i = 1; i < excelTable.Rows.Count; i++)
            {
    //check if the header = the database
                if (!((string)excelTable.Rows[0].ItemArray[0]).Contains("Name") 
& !((string)excelTable.Rows[0].ItemArray[1]).Contains("Number")
& !((string)excelTable.Rows[0].ItemArray[3]).Contains("Date"))
                {
                    ModelState.AddModelError("Error",
                        "Header mismatch, please select correct file");

                    break;
                }

                var name= (string)excelTable.Rows[i].ItemArray[0];
                var number= (int)excelTable.Rows[i].ItemArray[1];
                var notif = (string)excelTable.Rows[i].ItemArray[2];
                var date= (DateTime)excelTable.Rows[i].ItemArray[3];

                TestTable currentExcel = new TestTable 
                {
                    Name= name,
                    Num= number,
                    Notif = notif,
                    Date= date                    
                };

                this.db.TestTables.Add(currentExcel);
            }

            this.db.SaveChanges();
        }

Если правильный файл опубликован, он правильно вставляется в базу данных и отображается в / Analises /Индексная страница.Но если загружается пустой файл или файл, который не соответствует, он ломается (не вставляется), но все равно перенаправляется без сообщения об ошибке.

Возможно, свежая пара глаз может направить меня в правильном направлении.Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...