2009-06-18 8 views
0

In meiner ASP.NET-Anwendung, Wenn ich versuche, PDF-Datei zu öffnen, indem Sie den folgenden Code verwenden, erhalte ich einen FehlerFehler: beim Versuch, PDF in ASP.NET zu öffnen

Verwendung im Code

PDF-Datei erklärt
FileStream MyFileStream = new FileStream(filePath, FileMode.Open); 
long FileSize = MyFileStream.Length; 
byte[] Buffer = new byte[(int)FileSize + 1]; 
MyFileStream.Read(Buffer, 0, (int)MyFileStream.Length); 
MyFileStream.Close(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment; filename="+filePath); 
Response.BinaryWrite(Buffer); 

eRROR I LERNEN AMN

„es gab einen Fehler dieses document.The Datei öffnen beschädigt und konnte nicht geöffnet werden“

Antwort

1

Klingt eine aspx-Datei zur Ausgabe der pdf verwenden. Haben Sie überlegt, eine Aschx-Datei zu verwenden, die ein HttpHandler ist? Es umgeht alle typischen aspx-Overhead-Sachen und ist effizienter für das einfache Bereitstellen von Rohdaten. Hier

ist ein Beispiel für die Ashx Ihr Code verwendet:

<% WebHandler Language="c#" class="ViewPDF" %> 
public class ViewPDF : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     FileStream MyFileStream = new FileStream(filePath, FileMode.Open); 
     long FileSize = MyFileStream.Length; 
     byte[] Buffer = new byte[(int)FileSize + 1]; 
     MyFileStream.Read(Buffer, 0, (int)MyFileStream.Length); 
     MyFileStream.Close(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", "attachment; filename="+filePath); 
     Response.BinaryWrite(Buffer); 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 

Wenn Sie weiterhin die aspx Seite verwenden möchten. Stellen Sie sicher, dass Sie Folgendes tun:

// At the beginning before you do any response stuff do: 
Response.Clear(); 

// When you are done all your response stuff do: 
Response.End(); 

Das sollte Ihr Problem lösen.

0

Sie müssen die Antwort spülen sonst wird es teilweise transmitte d.

Response.Flush(); 
0

Zusätzlich Antwort auf ocedcio ist, müssen Sie sich bewusst sein, dass Stream.Read() nicht notwendigerweise alle Bytes angefordert liest. Sie sollten den Rückgabewert von Stream.Read() untersuchen und weiterlesen, wenn weniger Bytes gelesen werden als angefordert.

Sehen Sie diese Frage & Antwort für die Details: Creating a byte array from a stream

Verwandte Themen