/// <summary> /// Compress a ReportObject and return its array of bytes. /// </summary> /// <param name="ro">ReportObject to be compressed</param> /// <returns>Array of bytes representing the compressed ReportObject</returns> private byte[] Compress(ReportObject ro) { using (var ms = new MemoryStream()) { using (var zf = new ZipFile()) { zf.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; var dat = JsonConvert.SerializeObject(ro, this._serializerSettings); zf.AddEntry("ReportObject", dat); zf.Save(ms); } return(ms.ToArray()); } }
/// <summary> /// Stores a ReportLog object and its object data into a IFilesContainer container. /// The ReportLog object and its data is stored into a ReportObject object. /// /// The Report object is compressed before it is saved. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="metadata">ReportLog object to saved</param> /// <param name="dataObject">Data associated to the ReportLog</param> public void StoreReportData <T>(ReportLog metadata, T dataObject) { if (string.IsNullOrEmpty(metadata.Id)) { metadata.Id = Guid.NewGuid().ToString(); } //fc is a local storage FileStoreBlobFileContainer var fc = this.GetStorage(metadata); var ro = new ReportObject { Metadata = metadata, ReportData = dataObject }; var compressed = this.Compress(ro); //save into local disk fc.Save(metadata.Id, compressed); }