public async Task <AsyncReadFileResult> ReadFile(string fileIdentifier, IIdentity downloadingIdentity) { var ok = fileIdentifier.StartsWith("##VID#"); if (ok) { var idHint = fileIdentifier.Substring(6).Split("#").Select(n => int.Parse(n)).ToArray(); var retVal = new AsyncReadFileResult(); retVal.DeferredDisposals.Add(db.Database.UseConnection(out DbCommand cmd)); retVal.DeferredDisposals.Add(cmd); cmd.CommandText = "Select Content from TutorialStreamBlob where TutorialStreamId = @streamId"; var param = cmd.CreateParameter(); param.ParameterName = "@streamId"; param.Value = idHint[1]; cmd.Parameters.Add(param); var reader = await cmd.ExecuteReaderAsync().ConfigureAwait(false); retVal.DeferredDisposals.Add(reader); if (!reader.Read()) { retVal.DeferredDisposals.Reverse(); retVal.DeferredDisposals.ForEach(n => n.Dispose()); retVal.DeferredDisposals.Clear(); retVal.Success = false; return(retVal); } retVal.FileContent = reader.GetStream(0); retVal.Success = true; return(retVal); } throw new InvalidOperationException("Invalid File-Identifier provided!"); }
/// <summary> /// Materializes the QueryData of the requested DiagnoseQuery into the capable file format /// </summary> /// <param name="data">the result of the diagnose query</param> /// <param name="queryName">the name of the query that was executed</param> /// <param name="downloadIdentity">the download-identity that was used to request the data</param> /// <returns>a file-read result that describes the retrieved data</returns> protected override async Task <AsyncReadFileResult> MaterializeQueryData(object[] data, string queryName, IIdentity downloadIdentity) { var settingsName = $"{UniqueName}CfgFor{queryName}"; var setting = ScopedSettings.GetJsonSetting(settingsName); if (string.IsNullOrEmpty(setting)) { setting = GlobalSettings.GetJsonSetting(settingsName); } DiagQueryDumpConfig cfg = null; if (!string.IsNullOrEmpty(setting)) { cfg = JsonHelper.FromJsonString <DiagQueryDumpConfig>(setting); } else { cfg = new DiagQueryDumpConfig(); } if (cfg.DumpConfig == null) { cfg.DumpConfig = new DumpConfiguration { Name = "--Default-CFG-", Source = ".", Files = new DumpFormatFileCollection { new() { Children = new DumpConfigurationCollection { new() { Name = "Default", Source = "Default" } } } } }; } var tmp = new MemoryStream(); var rawData = (from t in data select ToDynResult(t)).ToArray(); dumper.DumpData(tmp, new[] { new DynamicResult(new Dictionary <string, object> { { queryName, rawData } }) }, cfg.DumpConfig); await tmp.FlushAsync(); await tmp.DisposeAsync(); var dumpData = tmp.ToArray(); tmp = new MemoryStream(dumpData); //tmp.Seek(0, SeekOrigin.Begin); var retVal = new AsyncReadFileResult { DownloadName = cfg.DownloadName, FileDownload = cfg.FileDownload, ContentType = cfg.ContentType, FileContent = tmp, Success = true }; return(retVal); }