ExcelReaderFactory和剃须刀页面使用excelReader验证是否为正确的文件

时间:2019-02-03 22:04:04

标签: c# razor-pages exceldatareader

无法验证文件是否正确,代码会中断,但文件始终会通过。

    [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 / Index页面中。 但是,如果上传的是空文件或不匹配的文件,它会中断(不插入),但仍会重定向而不会显示错误消息。

也许新鲜的眼睛可以将我指向正确的方向。 预先感谢!

0 个答案:

没有答案