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.");
            }
        }