2010-10-26 119 views
9

在前些日子堆棧溢出的一些很好的幫助之後,我放了一個下載腳本。不過,我現在已經發現,在文件下載後,我需要重新加載頁面以擺脫aspx頁面上的進度模板。在添加到下載代碼之前,刪除模板的代碼已經工作。文件下載後的更新頁面

代碼刪除進度模板:upFinanceMasterScreen.Update();

我已經打過電話把這個前後重定向到IHttpHandler

Response.Redirect("Download.ashx?ReportName=" + "RequestingTPNLeagueTable.pdf"); 


public class Download : IHttpHandler { 

public void ProcessRequest(HttpContext context) 
{  

    StringBuilder sbSavePath = new StringBuilder(); 
    sbSavePath.Append(DateTime.Now.Day); 
    sbSavePath.Append("-"); 
    sbSavePath.Append(DateTime.Now.Month); 
    sbSavePath.Append("-"); 
    sbSavePath.Append(DateTime.Now.Year); 

    HttpContext.Current.Response.ClearContent(); 
    HttpContext.Current.Response.ContentType = "application/pdf"; 
    HttpResponse objResponce = context.Response; 
    String test = HttpContext.Current.Request.QueryString["ReportName"]; 
    HttpContext.Current.Response.AppendHeader("content-disposition", "attachment; filename=" + test); 
    objResponce.WriteFile(context.Server.MapPath(@"Reports\" + sbSavePath + @"\" + test));  

} 
public bool IsReusable { get { return true; } } 

感謝您的幫助,您可以提供!

回答

25

當您發回一個文件供用戶下載時,是HTTP請求。換句話說,你可以有一個後期刷新瀏覽器頁面你可以發送文件供用戶下載。你不能沒有特殊的技巧。

這就是爲什麼大多數的網站,當你下載一個文件,它第一把你帶到一個新的頁面,上面寫着:「您的下載即將開始」,並隨後「重定向」您的文件使用它來下載元刷新或JavaScript。

例如,當你去這裏下載.NET 4運行時:

http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true

它呈現的頁面,然後使用下列元刷新標記以得到一個用戶要下載的文件:

<META HTTP-EQUIV="refresh" content=".1; URL=http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe" /> 

您可能需要在您的應用中執行類似操作。然而,如果你真的有興趣做之後文件是完全下載,那麼你是不好運氣的,因爲沒有事件可以與瀏覽器進行通信。唯一的方法就是像上傳附件時gmail使用的AJAX upload

+2

謝謝!我不認爲這是可能的,但只是想我會問。 – flyersun 2010-10-27 09:05:15

+0

由於您不能在同一頁面上顯示兩個頁面,爲什麼不使用兩個頁面呢!我的方法是更新並彈出另一個頁面(使用JavaScript windows.open())來處理下載。你可能希望看看'Page.ClientScript.RegisterStartupScript'。希望這有助於他人。 – user3454439 2017-01-05 06:42:39

4

在我的情況下,我使用的是MVC,而且我只是希望頁面在選擇下載按鈕幾秒後刷新,以更新下載計數。我正在從控制器返回文件。

要做到這一點,我只需添加一個onclick事件下載按鈕調用下面的腳本(也在視圖)改變了看法:

setTimeout(function() { 
     window.location.reload(1); 
    }, 5000); 

它適合我的目的...希望它有助於其他人。

+0

謝謝你的好方法。 – 2015-12-11 05:38:36