2009-06-18 6 views
0

Dans mon application ASP.NET, Lorsque je tente d'ouvrir le fichier PDF en utilisant le code ci-dessous, je reçois une erreurErreur: tout en essayant de PDF dans ASP.NET ouvrir

CODE utilisé pour afficher le fichier PDF

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

eRREUR J'Amn OBTIENS

« il y avait une erreur d'ouvrir ce fichier document.Dispositif est endommagé et ne pouvait pas ouvrir »

Répondre

1

Sons comme votre aide d'un fichier ASPX pour sortir le pdf. Avez-vous envisagé d'utiliser un fichier ashx qui est un HttpHandler? Il contourne tous les frais généraux Aspx et est plus efficace pour simplement servir des données brutes.

Voici un exemple de ashx en utilisant votre code:

<% 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; } 
    } 
} 

Si vous voulez continuer à utiliser la page ASPX. Assurez-vous de faire ce qui suit:

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

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

Cela devrait résoudre votre problème.

0

Vous devez rincer la réponse sinon il obtient partiellement ÉMETTEUR ré.

Response.Flush(); 
0

En plus de la réponse de ocedcio, vous devez savoir que Stream.Read() ne lit pas nécessairement tous les octets demandés. Vous devriez examiner la valeur de retour de Stream.Read() et continuer à lire si moins d'octets sont lus que demandé.

Voir cette question & réponse pour les détails: Creating a byte array from a stream

Questions connexes