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)を使用するのはどうですか?

ファイル名、contenttyp、コンテンツ自体など、読み込みに固有の情報を追加する必要があります。サンプルはあなたに良いスタートを与えるはずです。

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. そして、すべてのリクエストを1つずつチェックします..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 に答える