Frage

Ich versuche, in den Antwortstream zu schreiben - aber es ausfällt, ist es die Daten korrumpiert irgendwie ...

Ich möchte einen Stream zu schreiben, um der Lage sein, irgendwo anders auf die HttpWebResponse gespeichert, damit ich nicht ‚Writefile‘ für diese verwenden können, und ich möchte diese für mehrere MIME-Typen tun, aber es funktioniert nicht für alle von ihnen - mp3, pdf etc ...

 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();
        }
    }

Prost im Voraus

War es hilfreich?

Lösung

Weil Sie Zeichen schreiben, die Bytes nicht. Ein Zeichen ist definitiv kein Byte; es muss codiert werden, und das ist, wo Ihre „Korruption“ in kommt Machen Sie es wie diese statt.

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();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top