0

私は少し混乱していAccept-Encodingます。POSTメソッドを使用して圧縮ファイルの送信を受け入れるWebサービスがあります。Accept-Encoding: gzip送信されたファイルを検索して解凍するコードを以下に追加しました。問題は、インターネットブラウザから送信されたファイルにあります。リクエストヘッダーにはgzipが含まれていますが、ファイルは実際には圧縮されていません。たぶん誰かがファイルが実際に圧縮されていることを検出する方法を理解するのを助けることができますか?

var httpPostedFile = httpRequest.Files[0];
var contentLength = httpPostedFile.ContentLength;
var buffer = new byte[contentLength];
httpPostedFile.InputStream.Read(buffer, 0, contentLength);

const string acceptEncoding = "Accept-Encoding";
if (httpRequest.Headers[acceptEncoding] != null && httpRequest.Headers[acceptEncoding].Contains("gzip"))
{

  buffer = Decompress(buffer);
}

 static byte[] Decompress(byte[] gzip)
        {            
            using (var stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress))
            {
                const int size = 4096;
                var buffer = new byte[size];
                using (var memory = new MemoryStream())
                {
                    int count;
                    do
                    {
                        count = stream.Read(buffer, 0, size);
                        if (count > 0)
                        {
                            memory.Write(buffer, 0, count);
                        }
                    }
                    while (count > 0);
                    return memory.ToArray();
                }
            }
        }
4

1 に答える 1

0

Accept-Encodingは、クライアントが受け入れるエンコーディングを示します。

特定のリクエストのエンコーディングは、Transfer-EncodingとContent-Encodingを使用して指定されますが、これらは、マルチパートペイロードの一部だけでなく、リクエスト本文全体に常に適用されることに注意してください。

于 2012-06-12T13:30:02.400 に答える