Почему содержимое записывается в поток ответов - PullRequest
0 голосов
/ 12 ноября 2009

Я пытаюсь записать в поток ответов - но он терпит неудачу, он как-то портит данные ...

Я хочу иметь возможность записывать поток, хранящийся где-то еще, в HttpWebResponse, поэтому я не могу использовать для этого «WriteFile», плюс я хочу сделать это для нескольких типов MIME, но это не удается для всех них - mp3 PDF и т.д ...

 public void ProcessRequest(HttpContext context)
    {
        var httpResponse = context.Response;
        httpResponse.Clear();
        httpResponse.BufferOutput = true;
        httpResponse.StatusCode = 200;

        using (var reader = new FileStream(Path.Combine(context.Request.PhysicalApplicationPath, "Data\\test.pdf"), FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            var buffer = new byte[reader.Length];
            reader.Read(buffer, 0, buffer.Length);

            httpResponse.ContentType = "application/pdf";
            httpResponse.Write(Encoding.Default.GetChars(buffer, 0, buffer.Length), 0, buffer.Length);
            httpResponse.End();
        }
    }

Приветствия заранее

1 Ответ

4 голосов
/ 12 ноября 2009

Потому что вы пишете символы, а не байты. Символ определенно не байт; оно должно быть закодировано, и вот тут-то и возникает твое «порча». Сделай это вместо этого:

using (var reader = new FileStream(Path.Combine(context.Request.PhysicalApplicationPath, "Data\\test.pdf"), FileMode.Open, FileAccess.Read, FileShare.Read))
{
    var buffer = new byte[reader.Length];
    reader.Read(buffer, 0, buffer.Length);

    httpResponse.ContentType = "application/pdf";
    httpResponse.BinaryWrite(buffer);
    httpResponse.End();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...