Accept-Encoding如何查找文件是否实际压缩

时间:2012-06-12 13:10:51

标签: asp.net http iis-7

我对Accept-Encoding感到有些困惑。我有Web服务,它将接受使用POST方法提交的压缩文件。我添加了下面的代码,查找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();
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

Accept-Encoding指示客户接受的编码

使用Transfer-Encoding和Content-Encoding指定给定请求的编码,但请注意,这些将始终应用于整个请求主体,而不仅仅是多部分有效负载的一部分。