protected void btnSubmit_Click(object sender, EventArgs e) { var stopwatch = new Stopwatch(); FileStorageProvider provider = FileStorageProvider.Local; System.Web.UI.WebControls.FileUpload fileUploadControl = fuCsvFileLocal; var tracker = new OperationsGroup(); if (((Button)sender).ID.Equals("btnSubmitAzure")) { provider = FileStorageProvider.AzureStorageBlobs; fileUploadControl = fuCsvFileAzure; } if (fileUploadControl.PostedFile != null) { if (fileUploadControl.PostedFile.ContentLength > 0) { var memoryStream = StreamUtility.CopyToMemoryStream(fileUploadControl.PostedFile.InputStream); stopwatch.Start(); var scanResult = virusScanner.ScanStream(StreamUtility.CopyToMemoryStream(memoryStream)); stopwatch.Stop(); tracker.Add("Virus Scan", stopwatch.ElapsedMilliseconds); if (scanResult.IsSafe) { stopwatch.Restart(); var parseErrors = CsvFile.Validate(StreamUtility.CopyToMemoryStream(memoryStream)); stopwatch.Stop(); tracker.Add("CSV Validation", stopwatch.ElapsedMilliseconds); if (parseErrors.Count > 0) { ShowError(provider, "Errors found in file: <br />" + string.Join("<br />", parseErrors)); } else { try { stopwatch.Restart(); switch (provider) { case FileStorageProvider.AzureStorageBlobs: azureFileStorage.SavePostedFile(fileUploadControl.PostedFile.FileName, StreamUtility.CopyToMemoryStream(memoryStream)); break; case FileStorageProvider.Local: localFileStorage.SavePostedFile(fileUploadControl.PostedFile.FileName, StreamUtility.CopyToMemoryStream(memoryStream)); break; } stopwatch.Stop(); tracker.Add("Storage", stopwatch.ElapsedMilliseconds); ShowResult(provider, "The file has been uploaded.", tracker); UpdateFileList(); } catch (Exception ex) { ShowError(provider, ex.Message); } } } else { ShowError(provider, $"Virus scan found issues: {scanResult.Message}"); } } else { ShowError(provider, "Empty file uploaded."); } } else { ShowResult(provider, "Please select a file to upload."); } }