6

我的项目中有一个页面DownloadDocument.aspx,它的代码隐藏是DownloadDocument.aspx.cs

在我的DownloadDocument.aspx我有一个锚点,它采用这样的动态链接:

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

我想添加一个httphandler来控制下载的文件名,我该怎么做?提前致谢。

4

3 回答 3

16

为此使用通用处理程序(.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>
于 2012-09-09T16:20:22.213 回答
3

这取决于您尝试下载的文件类型...因为每个请求都HTTPHandler通过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"/>
于 2012-09-07T13:13:05.040 回答
0

您可以尝试使用此代码

<httpHandlers>
  <add 
   verb="POST"  
   path="*.jpg,*.jpeg,*.bmp,*.tif,*.tiff" 
   type="YourHandler" />
</httpHandlers>
于 2012-09-07T13:16:57.940 回答