private static IEnumerable <string> GetAllowedFileTypes(BulkFileType type) { if (type == BulkFileType.SupportingDocument) { return(new[] { MimeTypes.Bitmap, MimeTypes.Gif, MimeTypes.Jpeg, MimeTypes.MSExcel, MimeTypes.MSExcelXml, MimeTypes.MSPowerPoint, MimeTypes.MSPowerPointXml, MimeTypes.MSWord, MimeTypes.MSWordXml, MimeTypes.OpenOfficePresentation, MimeTypes.OpenOfficeSpreadsheet, MimeTypes.OpenOfficeText, MimeTypes.Pdf, MimeTypes.Png }); } return(new[] { ".xlsx", ".xls", ".csv" }); }
private static void PadMissingColumn(DataTable dataTable, BulkFileType type) { if (type == BulkFileType.ReceiptRecovery && dataTable != null && dataTable.Columns.Count == MaxColumns - 1) { dataTable.Columns.Add("RecoveredDisposed", typeof(string)); } }
private static RuleResult <BulkFileRules> GetFileTypesRule(HttpPostedFileBase file, BulkFileType type) { var allowedTypes = GetAllowedFileTypes(type); // For data uploads, it's diificult to identify CSV files correctly using Content Type, // hence opting for the filaname extention. var fileType = type == BulkFileType.SupportingDocument ? file.ContentType : Path.GetExtension(file.FileName); var result = allowedTypes.Contains(fileType) ? MessageLevel.Success : MessageLevel.Error; var rule = type == BulkFileType.SupportingDocument ? BulkFileRules.SupportingDocumentFileType : BulkFileRules.DataFileType; return(new RuleResult <BulkFileRules>(rule, result)); }
public async Task <BulkFileRulesSummary> GetFileRulesSummary(HttpPostedFileBase file, BulkFileType type, string token) { var rules = new List <RuleResult <BulkFileRules> > { GetFileTypesRule(file, type), GetFileSizeRule(file), await GetVirusScan(file, token) }; if (type != BulkFileType.SupportingDocument && // Only run this rule if all rules above have passed. rules.All(r => r.MessageLevel == MessageLevel.Success)) { rules.Add(await GetFileParse(file, type, token)); if (DataTable != null && DataTable.Rows.Count == 0) { rules.Add(new RuleResult <BulkFileRules>(BulkFileRules.EmptyData, MessageLevel.Error)); } } return(new BulkFileRulesSummary() { FileRulesResults = rules, DataTable = DataTable, FileBytes = FileBytes }); }
private async Task <RuleResult <BulkFileRules> > GetFileParse(HttpPostedFileBase file, BulkFileType type, string token) { MessageLevel result; try { var extension = Path.GetExtension(file.FileName); var isCsv = extension == ".csv"; var dataTable = await fileReader.GetFirstDataTable(file, isCsv, !isCsv, token); PadMissingColumn(dataTable, type); result = IsDataTableValid(dataTable) ? MessageLevel.Success : MessageLevel.Error; DataTable = dataTable; } catch (Exception) { result = MessageLevel.Error; } return(new RuleResult <BulkFileRules>(BulkFileRules.FileParse, result)); }