1

C:\ExtraContent\ のように、いくつかの PDF ファイルを含むハードドライブのフォルダーにいくつかのファイルがあります。このフォルダは Web サイトの一部ではありません。デフォルトの ASP.NET FileUploader を使用して、このフォルダーに PDF を正常にアップロードできました。問題ありません。

私がやりたいことは、そのフォルダー C:\ExtraContent\somePDF.pdf 内の PDF にリンクするハイパーリンクを作成することです。

次のコードで Button を使用して近づくことができます。

protected void Button1_Click(object sender, EventArgs e)
{
    WebClient client = new WebClient();
    Byte[] buffer = client.DownloadData("C:\ExtraContent\somePDF.pdf");
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-length", buffer.Length.ToString());
    Response.BinaryWrite(buffer);
}

上記は、ファイルを開くという点で機能します。しかし、これを ASP.NET HyperLink で動作させることはできません。

ハイパーリンクを使用する理由は、ユーザーが右クリックして [名前を付けて保存] を選択してコピーをダウンロードできるようにするためです。HyperLink コントロールが相対パスにしかリンクできない場合、目的の結果を得るにはどうすればよいですか?

注: アクセスしようとしているファイルをサイトの一部にすることは、私たちにとって現実的ではありません。

4

2 に答える 2

2

基本的に、説明した方法でフォルダーへのアクセスを許可することは、実際のセキュリティ リスクです (アクセス許可をハッキングする必要があるため)。望ましい行動を達成する方法は、これらの線に沿ったものです。

最初に空白aspxまたはashxページを作成します。

第二に、Page_LoadまたはProcessRequest次の行に沿ってコードを使用したい

string filePath = "c:\\Documents\\Stuff\\";
string fileName = "myPath.pdf";
byte[] bytes = System.IO.File.ReadAllBytes(filePath + fileName);
context.Response.Clear();
context.Response.ContentType = "application/pdf";
context.Response.Cache.SetCacheability(HttpCacheability.Private);
context.Response.Expires = -1;
context.Response.Buffer = true;
context.Response.AddHeader("Content-Disposition", string.Format("{0};FileName=\"{1}\"", "attachment", fileName));
context.Response.BinaryWrite(bytes);
context.Response.End(); 

私はこれをテストしておらず、頭から取り出したので、数週間かかるかもしれませんが、上記のコードは、提供されたファイルのダウンロードを個人ブラウザに開始させる正しい軌道に乗るはずです。

編集:(質問を読み直した後)あなたの問題が私が思っていたものと少し異なっていることに気付きました。問題を解決するには、使用しているハイパーリンクボタンを上記のようにリクエストを処理できるページにリンクするだけです。IE: ashx または aspx ページ

于 2012-04-26T05:18:15.343 に答える
0

「プロキシ」として機能するページへのハイパーリンクを作成して、ページがファイル ストリームを含む応答を返すようにする必要があります。

サイトの一部ではないファイルへのリンクを作成することはできません。

于 2012-04-26T05:06:05.027 に答える