2012-09-07 15 views
5

ho nel mio progetto una pagina DownloadDocument.aspx ed è codebhind è DownloadDocument.aspx.csASP.NET aggiungere un HttpHandler di modificare il nome del file scaricato

Nel mio DownloadDocument.aspx ho un ancoraggio, che prendono un collegamento dinamico come questo:

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

Desidero aggiungere un httphandler per controllare il nome del file scaricato, come posso farlo? Grazie in anticipo.

risposta

16

Che ne dici di usare a gestore generico (.ashx) per questo?

È necessario aggiungere informazioni di caricamento specifiche, come nomefile, contenttyp e il contenuto stesso. Il campione dovrebbe darti un buon vantaggio.

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; 
     } 
    } 
} 

Il gestore generico viene chiamato da un URL, come questo:

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

dipende dal tipo di file che si sta tentando di scaricare ... perché ogni richiesta è passata attraverso HTTPHandler 's ProcessRequest. e controlla tutte le richieste una per una. È necessario aggiungere qualsiasi HTTPHandler al progetto e aggiungere qualcosa come questo nel proprio web.config.

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

Questa controllerà la vostra richiesta per ogni tipo .. Image menzionati nella attributo path

Edit:

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

voglio di supportare qualsiasi tipo di file estensione – Vervatovskis

+0

vedere la sezione Modifica ... questo sarà registrare il gestore per la vostra pagina di download, per ogni richiesta indipendentemente dai tipi di file .. –

+0

scusa Mayank, nel tipo ho appena inserito il nome del gestore o il percorso completo del gestore (sono nuovo in ambiente .NET) – Vervatovskis

0

Si può provare con questo codice

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