2009-06-18 15 views
0

でPDFを開くしようとしているときにエラー:私は以下のコードを使用してPDFファイルを開こうとすると、私はPDFファイルを表示するために使用されるエラー</p> <p>コードを取得しています、私のASP.NETアプリケーションでASP.NET

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

私は

を取得AMN ERROR「このdocument.Theファイルを開くにエラーが発生しましたが破損しているため、開くことができませんでした」

答えて

1

は、あなたが出力するPDFをASPXファイルを使用してのような音。あなたはHttpHandlerであるashxファイルの使用を検討しましたか?これは、すべての典型的なASPXオーバーヘッドのものをバイパスし、生のデータを処理するだけで効率的です。

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

それでもaspxページを使用したい場合:ここで

はあなたのコードを使用してASHXの一例です。以下を実行していることを確認してください。

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

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

問題を解決するはずです。

0

をすることができます応答をフラッシュする必要があり、それ以外の場合は、部分的にtransmitteを取得d。返信のをocedcioに加えて

Response.Flush(); 
0

、あなたはStream.Read()は必ずしも要求されたバイトのすべてを読んでいないことに注意する必要があります。 Stream.Read()からの戻り値を調べて、要求されたバイト数より少ないバイト数が読み取られた場合は読み込みを続行する必要があります。

詳細については、この質問の答え&を参照してください:Creating a byte array from a stream

関連する問題