簡體   English   中英

在將文件寫入響應后,有沒有辦法完成回發?

[英]Is there a way to complete the post back after writing out a file to the Response?

我有一個按鈕,當單擊時,將生成一個PDF並將其寫入響應。

這是代碼的基本結構:

try
{
    using(Stream stream = generatePdf())
    {
       var file = createFile(stream);
       file.Transmit(HttpContext.Current.Response);
    }
}
catch (Exception ex)
{
    // Handle exception
    // Display Error Message
}

transmit方法包含以下代碼:

response.AddHeader("Content-Disposition", String.Format("attachment; filename={0}", filename));
response.AddHeader("Content-Length", bytes.Length.ToString());
response.ContentType = "application/octet-stream";
response.BinaryWrite(bytes);

下載文件工作正常,但它沒有完成回發。

如果我要在file.Transmit之上拋出異常,錯誤處理將正常工作,我會看到消息在我的瀏覽器中顯示。 但是,如果file.Transmit之后有異常,則沒有任何反應。 用戶保存/打開pdf,頁面不會重新加載。

如何才能使回發始終完成,這樣我可以向用戶顯示相應的消息?

聽起來你正試圖讓響應包含兩部分:頁面 PDF。 你不能這樣做。 通常,下載頁面會在您訪問它們時(通過JavaScript,我相信)以單獨的請求開始下載,直接鏈接以防JavaScript無效。

任何一個HTTP請求只能有一個響應。

Response.End()從字面上結束整個響應。

我使用它時有兩種方法:

1)始終確保它是回發中的最終要求點。

2)(以及使用AJAX進行文件調用的唯一方法)在iframe中創建一個小頁面僅用於發送文件並在幀上調用刷新... response.end將結束該幀的響應而不是整個回發。

編輯:這是我的問題線程相同的主題使用Response.TransmitFile物理文件無法正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM