2009-10-07 107 views
2

如何在新的瀏覽器窗口中寫入輸出流?將輸出流寫入新窗口

目前,我有下面的代碼。顯然,它在同一個窗口中打開流。我知道我可以將Outputstream寫入一個文件並在新窗口中打開它,但這不是一個選項。

protected void openPDF(byte[] dados) { 

    HttpContext contexto = HttpContext.Current; 

    contexto.Response.Clear(); 
    contexto.Response.AppendHeader("content-type", "application/pdf"); 
    contexto.Response.AppendHeader("Expires","Mon, 26 Jul 1990 05:00:00 GMT"); 
    contexto.Response.AppendHeader("Cache-Control","no-cache, must-revalidate"); 
    contexto.Response.AppendHeader("Pragma","no-cache"); 
    contexto.Response.Expires = -1; 
    contexto.Response.AppendHeader("Content-Disposition", "inline; filename=labels.pdf"); 
    contexto.Response.AddHeader("content-length", dados.Length.ToString()); 
    contexto.Response.OutputStream.Write(dados, 0, dados.Length); 
    contexto.Response.OutputStream.Flush(); 
    contexto.Response.End(); 
    } 

回答

1

請求文件的鏈接需要指定您想要一個新的瀏覽器窗口。

<a href="/path/to/file" target="_blank">PDF</a> 

一旦請求被髮送到服務器,服務器只是,結果把它在請求它,除非你指定一個不同的目標窗口響應。很顯然,將其更改爲附件會提示下載,但您知道並希望避免它。

其他解決方案是編寫一個響應,使用一些JavaScript來打開一個新窗口並執行實際的請求來獲取數據。如果你知道你總是希望它在一個新的窗口中,我認爲改變鏈接來指定一個新窗口是一個更好的解決方案。

1

服務器不能做到這一點單獨 ...

服務器只響應請求,並在客戶端的顯示器/使用這些反應,因爲它認爲合適的。

您需要通過讓客戶端在新的瀏覽器窗口中請求此PDF文件(或其他內容)來更改客戶端應用程序的流程。這可以簡單地完成,例如,如果PDF是當前在用戶點擊鏈接之後發送的,則通過在a元素中添加target ='some_window_name'屬性。

換句話說,在服務器收到請求時,爲響應更改'目的地'已經太晚了(*)。所以這個想法是讓客戶端從/爲新的瀏覽器窗口發出請求。

(*)爲時已晚...
嗯......也許不是,有人可能會發現包裹有一些JavaScript ENVELOPPE響應的一個聰明的辦法這將打開一個新的瀏覽器窗口,並以某種方式(?)主要內容與PDF內容。或者也許有其他一些竅門......無論如何,這可能會有點人爲...(與僅僅讓瀏覽器在正確的上下文中要求相比)

0

該文件是作爲回發的一部分生成的嗎?如果是這樣,這很棘手;您最好的選擇可能是將Content-Disposition更改爲attachment,這將提示用戶使用打開/保存對話框而不是顯示文件。如果沒有,在鏈接中使用target="_blank"是解決方案。

+0

基本上,我推在SharePoint Web部件的按鈕打開一個本地文件。 webpart調用webservice返回一個byte []。我想要的是將byte [](它是一個pdf文件)寫入一個新窗口,因爲在同一個窗口中打開它不是非常用戶友好的(ish)。 – none 2009-10-07 15:04:52

+0

您需要更改webpart中的按鈕以調用一些Javascript來打開一個新窗口。新窗口將需要一個新的頁面請求,並且您必須傳遞查詢字符串中調用Web服務所需的任何上下文數據。 batwad 2009-10-08 09:40:23

-1

,你必須生成一個文件,你可以使用此代碼在新窗口中

Process process = new Process(); 
process.StartInfo.UseShellExecute = true; 
process.StartInfo.FileName = outputPdfFile; 
process.Start(); 
+0

-1:這是asp.net。 – 2013-12-13 03:48:02