ASP.NET добавить httphandler для редактирования загруженного имени файла

У меня в проекте есть страница DownloadDocument.aspx и это codebhind это DownloadDocument.aspx.cs

В моем DownloadDocument.aspx у меня есть якорь, который принимает динамическую ссылку, как это:

<a id="downloadLink" runat="server"  style="margin:5px" 
href="<%# CONTENT_DIRECTORY_ROOT + document.Path %>">Download current file</a>

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

3 ответа

Решение

Как насчет использования универсального обработчика (.ashx) для этого?

Вам нужно добавить информацию о загрузке, такую ​​как имя файла, тип контента и сам контент. Образец должен дать вам хороший старт.

public class GetDownload : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        if (!string.IsNullOrEmpty(context.Request.QueryString["IDDownload"]))
        {
                context.Response.AddHeader("content-disposition", "attachment; filename=mydownload.zip");
                context.Response.ContentType = "application/octet-stream";
                byte[] rawBytes = // Insert loading file with IDDownload to byte array
                context.Response.OutputStream.Write(rawBytes, 0, rawBytes.Length);
        }
    }

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

Общий обработчик вызывается из URL, например так:

<a href="/GetDownload.ashx?IDDownload=1337">click here to download</a>

Это зависит от типа файла, который вы пытаетесь загрузить... потому что каждый запрос прошел HTTPHandler"s ProcessRequest, и он проверяет каждый запрос по одному.. Вам нужно добавить любой HTTPHandler к вашему проекту и нужно добавить что-то подобное в ваш web.config,

 <httpHandlers>
  <add path="*.jpg,*.jpeg,*.bmp,*.tif,*.tiff" verb="*" type="NameofYourHandler" />
</httpHandlers>

Это проверит ваш запрос для каждого Image типа.. упоминается в path атрибут

Редактировать:

<add verb="*" path="*DownloadDocument.aspx " type="NameofYourHandler"/>

Вы можете попробовать с этим кодом

<httpHandlers>
  <add 
   verb="POST"  
   path="*.jpg,*.jpeg,*.bmp,*.tif,*.tiff" 
   type="YourHandler" />
</httpHandlers>
Другие вопросы по тегам