2010-10-20 73 views
0

Greatings!使用Ihttphandler下載多個文件

我正在製作一個報告腳本,它在按鈕單擊上運行多個報告(pdf)。這些報告是在Web服務器上創建的,然後我希望用戶可以選擇下載文件。我已經制定了從服務器下載一個文件的腳本。但我不知道如何下載多個文件? (可能會有大約50)

我運行一個報告後,我將用戶重定向到http處理程序腳本。

Response.Redirect("Download.ashx?ReportName=" + "WeeklySummary.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));  
    HttpContext.Current.Response.Flush(); 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.End(); 

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

} 

在此先感謝您,請讓我知道您是否希望再看到我的腳本。

回答

1

我馬上看到的2個選項是顯而易見的重複調用HTTP處理程序。另一種方法是在服務器上壓縮它們,並通過電線發送zip文件。你可以使用內置的GZipStream類來實現這一點。

此外,您還需要在處理程序中添加一些代碼,以便在下載完成後清理這些臨時文件。

+0

我曾經想過只是調整HTTP Headler的負載時間,但不知道是否有更好的方法來做到這一點。想想我會壓縮他們。感謝您的鏈接! – flyersun 2010-10-20 14:09:47