Versucht zu streamen, eine PDF-Datei mit asp.net produziert eine "beschädigte Datei"

In einem meiner asp.net web-Anwendungen, die ich verstecken muss Sie den Speicherort einer pdf-Datei an den Benutzer.

So, ich Schreibe eine Methode, die ruft Ihren binären Inhalt von seiner Lage auf einem CMS system und dann spült ein byte-array, um die web-Benutzer.

Ich bekomme leider einen Fehler beim herunterladen der Bach: "Konnte die Datei nicht öffnen, weil es damadged" (oder etwas ähnlich, dass, wenn Sie die Datei öffnen in adobe reader).

Frage 1: was mache ich falsch?
Frage 2: kann ich den download großer Dateien mit diesem Ansatz?

    private void StreamFile(IItem documentItem)
    {
        //CMS vendor specific API
        BinaryContent itemBinaryContent = documentItem.getBinaryContent();
        //Plain old .NET
        Stream fileStream = itemBinaryContent.getContentStream();
        var len = itemBinaryContent.getContentLength();
        SendStream(fileStream, len, itemBinaryContent.getContentType());
    }

    private void SendStream(Stream stream, int contentLen, string contentType)
    {
        Response.ClearContent();
        Response.ContentType = contentType;
        Response.AppendHeader("content-Disposition", string.Format("inline;filename=file.pdf"));
        Response.AppendHeader("content-length", contentLen.ToString());
        var bytes = new byte[contentLen];
        stream.Read(bytes, 0, contentLen);
        stream.Close();
        Response.BinaryWrite(bytes);
        Response.Flush();
    }
Warum nicht Antwort.WriteFile-Methode?
Die Datei existiert nicht wirklich in der Datei-system.
Um deutlicher zu sein: die Datei existiert in der CMS-Datenbank. Es ist url-adressierbare, aber ich kann nicht wirklich abrufen der Datei aus dem Dateisystem.
Ah, ich mised Teil. Wie zu entfernen content-length? Auch, warum u müssen Zeichenfolge.Format("inline;filename=Datei.pdf") ?
Entfernen, dass macht keinen Unterschied, leider 🙁

InformationsquelleAutor Pablo | 2009-08-19

Schreibe einen Kommentar