2

これを行う方法を説明する Stack のリンクを見つけましたが、PHP 用語でしか説明していません。Web ページ フォームで開くのではなく、自動的に「名前を付けて保存」画面に移動するように、Web サイトに PDF ファイルへのリンクを設定したいと考えています。私のクライアントの多くは、Web ページでファイルを作成したり、名前を付けて保存したりする方法を知らないため、このようにして、エンド ユーザーは簡単にダウンロードできるようになります。

したがって、次のようなリンクが必要です。

<a href="brochure.pdf" target="_blank">Download Brochure</a>

次に、「名前を付けて保存」ボックスに移動し、クライアントが別の Web ページを開くことなく PDF パンフレットを自分のコンピューターに保存できるようにします。どんな助けでも大歓迎です!

4

3 に答える 3

4

"brochure.pdf" を、Page_Load イベントで次のコードを含む asp.net ページに置き換えると、目的の動作が得られます。

  string filename = "brochure.pdf";
  Response.ContentType = "image/pdf";
  string headerValue = string.Format("attachment; filename={0}", filename);
  Response.AppendHeader("Content-Disposition", headerValue);
  Response.TransmitFile(Server.MapPath(filename));
  Response.End();

別の方法として、上記のコードを含むリンク ボタンを含める方法があります。セキュリティ上の理由から、ユーザーが任意のファイルにアクセスできないように、ファイル名を検証して割り当ててください。

于 2012-09-07T14:46:25.383 に答える
2

You can't force a file download from a hyperlink alone (or reliably using Javascript) unless you add the Content-Disposition header to the response; therefore, one way to address this issue and always force a file download could be to have an intermediate page that will add the header for you.

Your link, therefore, has to become something like this:

<a href="DownloadMgr.aspx?File=brochure.pdf" target="_blank">Download Brochure</a>

And DownloadMgr.aspx should be something like this:

if(!IsPostback)
{
    if(Request.QueryString["File"]!=null) 
    {  
       if(Request.QueryString["File"].Contains("pdf")))
          Response.ContentType = "application/pdf"; //varies depending on the file being streamed
   Response.AddHeader("Content-Disposition", "attachment; filename=" +  Request.QueryString["File"]);
   Response.WriteFile(Server.MapPath(Request.QueryString["File"]));                
}

A better approach, though, is to create an HTTPHandler to do the same thing. You can look at this answer for more details on how to do it. One of the benefits of creating an HTTPHandler is that it doesn't involve all the processing, initialization and so forth, that's required for a regular aspx page.

Sample with full code:

<%@ Language=C# %>
<HTML>
<head>
    <title>Download Manager</title>
</head>
   <script runat="server" language="C#">
       void Page_Load(object sender, EventArgs e)
       {
           if (!this.Page.IsPostBack)
           {
               if (Request.QueryString["File"] != null)
               {
                   if (Request.QueryString["File"].Contains("pdf"))
                       Response.ContentType = "application/pdf"; //varies depending on the file being streamed
                   Response.AddHeader("Content-Disposition", "attachment; filename=" + Request.QueryString["File"]);
                   Response.WriteFile(Server.MapPath(Request.QueryString["File"]));
               }
           }
       }
   </script>
   <body>
      <form id="form" runat="server">

      </form>
   </body>
</HTML>

VB.NET version

<%@ Language="VB" %>
<HTML>
<head>
    <title>Download Manager</title>
</head>
   <script runat="server" language="VB">
       Sub Page_Load()
           If (Not Page.IsPostBack) Then

               If (Request.QueryString("File") IsNot Nothing) Then
                   If (Request.QueryString("File").Contains("pdf")) Then
                       Response.ContentType = "application/pdf" 'varies depending on the file being streamed
                   End If
                   Response.AddHeader("Content-Disposition", "attachment; filename=" + Request.QueryString("File"))
                   Response.WriteFile(Server.MapPath(Request.QueryString("File")))
               End If
           End If
       End Sub
   </script>
   <body>
      <form id="form" runat="server">

      </form>
   </body>
</HTML>

Now save the above code as DownloadMgr.aspx and drop it inside your website.

于 2012-09-07T14:50:57.777 に答える
0

誰かが知る必要がある場合の将来の参考のために、Tom と Icarus の回答を組み合わせて回答を見つけました。一部の C# を VB に変換する必要がありました。とにかく、私のハイパーリンクは次のとおりです。

<a href="DownloadMgr.aspx">Download Brochure</a>

私のDownloadMgr.aspx.vbコードビハインドは次のようなものです:

Partial Class products_DownloadMgr
    Inherits System.Web.UI.Page

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

    Dim filename As String = "USS_Exact_Scan_Introduction.pdf"
    Response.ContentType = "image/pdf"
    Dim headerValue As String = String.Format("attachment; filename={0}", filename)
    Response.AppendHeader("Content-Disposition", headerValue)
    Response.TransmitFile(Server.MapPath(filename))
    Response.[End]()

End Sub

End Class

時間を割いて手伝ってくれた Tom と Iracus に感謝します!

于 2012-09-07T20:59:21.733 に答える