2012-10-27 126 views
0

我的情況是這樣的:從服務器返回PDF

我讀,並從服務器中,然後在iframe內顯示返回一個PDF文件。以下代碼適用於IE。但是,當我通過Chrome訪問該網站時,我收到了所有垃圾字符。

while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0) 
{ 
    if (HttpContext.Response.IsClientConnected) 
    { 
      HttpContext.Response.BufferOutput = true; 
      HttpContext.Response.ContentType = "application/pdf";      
      HttpContext.Response.OutputStream.Write(buffer, 0, buffer.Length); 
      //HttpContext.Response.Flush(); 
    } 
} 

當我刷新響應,我確實看到PDF正確。問題在於調用flush會導致服務器上的"Server cannot set status after HTTP headers have been sent"警告。

問題是:爲什麼Chrome需要刷新,並且如果有避免刷新的方法?到目前爲止,我已閱讀所有帖子,無法解決與刷新相關的服務器錯誤。

服務器 - IIS7,在Windows Server 2008 R2

應用程序 - ASP.Net 4.0.30319.0,C#,阿賈克斯

+0

而沒有使用返回'FileResult'動作? – codingbiz

+0

直接發送到iFrame的pdf文件顯示在fancybox內。不確定在這種情況下是否返回FileResultwill工作。 – user1135625

回答

0

我希望這會幫助你,改變你的控制器返回FileResult

public FileResult DownloadPDF() 
{ 
    buffer = <bytes from your PDF file>; 
    return File(buffer, "application/pdf", "download.pdf"); 
} 

顯示PDF

public FileResult ShowPDF() 
{ 
    buffer = <bytes from your PDF file>; 
    return File(buffer, "application/pdf"); 
} 
+0

該應用程序使得文件不應該被下載,而是顯示在iFrame/Fancybox中。否則,還有其他解決方案可以奏效。 – user1135625

+0

然後嘗試刪除',「download.pdf」'部分。如果它沒有指定文件名,它將顯示在瀏覽器中 - 如果我記得非常好 – codingbiz

+0

謝謝。我需要在fancybox裏面顯示pdf。 – user1135625