загрузка нескольких файлов с помощью Ihttphandler

Спасибо!

Я работаю над скриптом отчетности, который запускает ряд отчетов (pdf) при нажатии кнопки. Отчеты создаются на веб-сервере, тогда я бы хотел, чтобы у пользователя была возможность загрузить файлы. Я разработал скрипт для загрузки одного файла с сервера. Но я не уверен, как загрузить несколько файлов? (скорее всего их будет около 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; } } 

}

Заранее спасибо, пожалуйста, дайте мне знать, если вы хотите увидеть больше моего сценария.


person flyersun    schedule 20.10.2010    source источник


Ответы (1)


2 варианта, которые я вижу сразу, очевидны: просто повторно вызывать обработчик HTTP. Другой способ — заархивировать их на сервере и отправить zip-файл по сети. Вы можете использовать встроенный класс GZipStream для выполнить это.

Кроме того, вы можете добавить код в свой обработчик для очистки этих временных файлов после их загрузки.

person Steve Danner    schedule 20.10.2010
comment
Я много раз думал о простом вызове HTTP-заголовка, но не был уверен, есть ли лучший способ сделать это или нет. Думаю, я застегну их. Спасибо за ссылку! - person flyersun; 20.10.2010