public async Task <ActionResult> ExportFile(ExportModel options) { try { List <DataModel> data = new List <DataModel>(); string filename = Session.SessionID; string path = ""; string fullPath = ""; Helpers.DocumentHelper s = new Helpers.DocumentHelper(); filename += ".json"; path = Server.MapPath(Common.GlobalSettings.GetJSONPath); fullPath = path + filename; List <MeasurementModel> measurements = s.DezerializeJSONFile <List <MeasurementModel> >(fullPath); if (measurements == null || measurements?.Count < 1) { return(new HttpNotFoundResult("Data Cant be read")); } string csvFilename = Session.SessionID + ".csv"; string csvPath = Server.MapPath(Common.GlobalSettings.GetCsvPath); string csvFullPath = csvPath + csvFilename; Helpers.CsvExportHelper ceh = new Helpers.CsvExportHelper(); ceh.CreateCsvFile(csvFilename, csvPath, options, measurements); //HACK: Possible out of memory if file exceeds maximum storage size of byte array! should this be configured on server IIS? byte[] filedata = System.IO.File.ReadAllBytes(csvFullPath); Response.AddHeader("Content-Disposition", ceh.CreateContentDisposition("Measurements.csv", filename, path).ToString()); string contentType = MimeMapping.GetMimeMapping(csvFullPath); System.IO.File.Delete(csvFullPath); return(File(filedata, contentType)); } catch (IOException ioex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ioex, System.Web.HttpContext.Current.Request); return(new HttpNotFoundResult("Data Cant be read")); } catch (UnauthorizedAccessException uaex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(uaex, System.Web.HttpContext.Current.Request); return(new HttpUnauthorizedResult("Data Cant be read")); } catch (ArgumentException arex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(arex, System.Web.HttpContext.Current.Request); return(new HttpNotFoundResult("Data Cant be read")); } catch (NotSupportedException nsupex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(nsupex, System.Web.HttpContext.Current.Request); return(new HttpNotFoundResult("Data Cant be read")); } catch (Exception ex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ex, System.Web.HttpContext.Current.Request); return(new HttpNotFoundResult("Data Cant be read")); } }
public async Task <ActionResult> Measurements(MeasurementQueryModel query, CancellationToken t) { CancellationToken disconnectedToken = Response.ClientDisconnectedToken; var timeOutToken = Request.TimedOutToken; var source = CancellationTokenSource.CreateLinkedTokenSource(t, disconnectedToken, timeOutToken); Helpers.LoginHelper lh = new Helpers.LoginHelper(); query.Key = lh.GetAuthenticationKey(this.HttpContext); if (query.Key != null) { ModelState.Remove("key"); ModelState.Add("Key", new ModelState()); ModelState.SetModelValue("Key", new ValueProviderResult(query.Key, query.Key, System.Globalization.CultureInfo.CurrentCulture)); } if (!ModelState.IsValid) { return(RedirectToAction("RedirectToLogin")); } Repository r = new Repository(); try { var measurements = await r.GetMeasurementsAsync(query, source.Token, true); if (measurements?.Count > 0 && !source.IsCancellationRequested) { ViewBag.DataCount = measurements[0].Data.Count; Helpers.DocumentHelper s = new Helpers.DocumentHelper(); string filename = Session.SessionID + ".json"; string directoryPath = Server.MapPath(Common.GlobalSettings.GetJSONPath); s.SerializeJSONFile <List <MeasurementModel> >(measurements, directoryPath, filename); ViewBag.DatetimeFormats = Helpers.DatetimeFormatHelper.GetPossibleDatetimeFormats(); ViewBag.ExportModel = new Models.ExportModel(); ViewBag.MeasurementCount = measurements.Count; } else { source.Dispose(); return(Content("<span class='text-danger'>0 measurements found with given parameters.</span>")); } if (measurements.Count > 3000) { var m = measurements.Take(3000); measurements = m.ToList(); } return(PartialView("~/Views/Export/Export.cshtml", measurements)); } catch (KeyNotFoundException kex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(kex, System.Web.HttpContext.Current.Request); return(RedirectToAction("RedirectToLogin")); } catch (UnauthorizedAccessException uex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(uex, System.Web.HttpContext.Current.Request); return(RedirectToAction("RedirectToLogin")); } catch (OperationCanceledException canceled) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(canceled, System.Web.HttpContext.Current.Request); source.Dispose(); return(Content("<span class='text-danger'>Request cancelled.</span>")); } catch (Exception ex) { Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ex, System.Web.HttpContext.Current.Request); return(RedirectToAction("RedirectToLogin")); } }