2013-01-31 100 views
1

可能重複:
ZLIB Decompression - Client Side如何解壓JavaScript中的字符串,用C#壓縮?

我會盡量清晰,我很抱歉,我的英語不好。這是一個問題: 在我的web應用程序我收到代表這個算法壓縮的圖像的字符串,用C#編寫:

public static class Compression 
{ 
    public static string Compress(string text) 
    { 
     byte[] buffer = Encoding.UTF8.GetBytes(text); 
     MemoryStream ms = new MemoryStream(); 
     using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true)) 
     { 
      zip.Write(buffer, 0, buffer.Length); 
     } 

     ms.Position = 0; 
     MemoryStream outStream = new MemoryStream(); 

     byte[] compressed = new byte[ms.Length]; 
     ms.Read(compressed, 0, compressed.Length); 

     byte[] gzBuffer = new byte[compressed.Length + 4]; 
     System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length); 
     System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4); 
     return Convert.ToBase64String(gzBuffer); 
    } 

    public static string Decompress(string compressedText) 
    { 

     byte[] gzBuffer = Convert.FromBase64String(compressedText); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      int msgLength = BitConverter.ToInt32(gzBuffer, 0); 
      ms.Write(gzBuffer, 4, gzBuffer.Length - 4); 

      byte[] buffer = new byte[msgLength]; 

      ms.Position = 0; 
      using (GZipStream zip = new GZipStream(ms, CompressionMode.Decompress)) 
      { 
       zip.Read(buffer, 0, buffer.Length); 
      } 

      return Encoding.UTF8.GetString(buffer); 
     } 
    } 
} 

的解壓方法是在服務器端應用程序使用。我收到一個帶有字符串的xml文件,該文件代表使用Compress方法壓縮的圖像,我希望能夠在我的web應用程序中解壓JavaScript中的字符串。有沒有辦法做到這一點?還有其他解決方案嗎?謝謝大家!!

+1

更好的是,如果我可以複製該方法**解壓縮**爲JavaScript風格:) – user2000769

+1

要回答關於其他解決方案的問題,您必須指定您嘗試使用此方法解決的問題。 – Guffa

+0

我想解決這個問題:我的web應用程序從服務器接收一個xml文件與幾個信息。其中一些是用一對屬性:鍵和值描述的圖像。該值是由用C#編寫的函數** Compress **壓縮的字符串,我希望能夠解壓縮用JavaScript編寫的我的Web應用程序中的字符串。 – user2000769

回答

0

最好的解決方案可能是將解壓縮函數從C#翻譯成Javascript。您可以使用Javascript中已有的一個,如this one,但您需要更改圖像的來源或在服務器上解壓縮 - 重新壓縮,除非它碰巧與您正在使用的壓縮兼容。

另一種選擇是將圖像轉換爲.jpg或.png,然後再使用它,再次在服務器上。這將爲您提供更大的靈活性,但可能會對服務器造成負擔,具體取決於流量和圖像大小。

0

您可以使用JSXCompressor庫進行解壓(deflate,unzip)。

但是,如果您的網絡服務器支持http級別的壓縮,我認爲您可以跳過壓縮和解壓縮。

+0

JSXCompressor庫似乎對我的作用域或(可能:)沒有用)我不明白如何使用該庫。有沒有一個JSXCompressor的例子用於我的目的? – user2000769

相關問題