PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/Blazing.CMS/Blazing.UI.Cms/Util/ViewstateCompressionHelper.cs

#
C# | 63 lines | 59 code | 4 blank | 0 comment | 3 complexity | fc10d15537b4e4b85cc8b09b288f7c6e MD5 | raw file
Possible License(s): LGPL-2.1
  1. using System;
  2. using System.IO;
  3. using System.IO.Compression;
  4. using System.Web.UI;
  5. namespace Blazing.Web.Util
  6. {
  7. public class ViewstateCompressionHelper
  8. {
  9. public static object LoadPageStateFromPersistenceMedium(Page page)
  10. {
  11. string viewState = page.Request.Form["__VSTATE"];
  12. byte[] bytes = Convert.FromBase64String(viewState);
  13. bytes = Decompress(bytes);
  14. LosFormatter formatter = new LosFormatter();
  15. return formatter.Deserialize(Convert.ToBase64String(bytes));
  16. }
  17. public static void SavePageStateToPersistenceMedium(Page page, object viewState)
  18. {
  19. LosFormatter formatter = new LosFormatter();
  20. StringWriter writer = new StringWriter();
  21. formatter.Serialize(writer, viewState);
  22. string viewStateString = writer.ToString();
  23. byte[] bytes = Convert.FromBase64String(viewStateString);
  24. bytes = Compress(bytes);
  25. if(ScriptManager.GetCurrent(page) == null)
  26. page.ClientScript.RegisterHiddenField("__VSTATE", Convert.ToBase64String(bytes));
  27. else
  28. ScriptManager.RegisterHiddenField(page, "__VSTATE", Convert.ToBase64String(bytes));
  29. }
  30. public static byte[] Compress(byte[] data)
  31. {
  32. MemoryStream output = new MemoryStream();
  33. DeflateStream deflate = new DeflateStream(output,
  34. CompressionMode.Compress, true);
  35. deflate.Write(data, 0, data.Length);
  36. deflate.Close();
  37. return output.ToArray();
  38. }
  39. public static byte[] Decompress(byte[] data)
  40. {
  41. MemoryStream input = new MemoryStream();
  42. input.Write(data, 0, data.Length);
  43. input.Position = 0;
  44. DeflateStream deflate = new DeflateStream(input,
  45. CompressionMode.Decompress, true);
  46. MemoryStream output = new MemoryStream();
  47. byte[] buff = new byte[512];
  48. int read = -1;
  49. read = deflate.Read(buff, 0, buff.Length);
  50. while (read > 0)
  51. {
  52. output.Write(buff, 0, read);
  53. read = deflate.Read(buff, 0, buff.Length);
  54. }
  55. deflate.Close();
  56. return output.ToArray();
  57. }
  58. }
  59. }