私は少し混乱してい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();
}
}
}