2012-04-26 10 views
1

C:\ ExtraContent \のようなハードドライブ上のフォルダにいくつかのファイルがあります。このフォルダはウェブサイトの一部ではありません。私は正常に、このフォルダにデフォルトのASP.NET FileUploaderを使用してPDFをアップロードできました。問題はありません。私がやりたい何ローカルPCの物理パスへのハイパーリンクをウェブサイトにないファイルに作成する

は、そのフォルダのCにPDFにリンクするハイパーリンクを作成、次のとおりです。\ ExtraContent \ somePDF.pdf

私は近くに次のコードでボタンを使用して取得することができています:

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を使用する理由は、ユーザーが右クリックして名前を付けて保存して、コピーをダウンロードできるようにするためです。 HyperLinkコントロールが相対パスにしかリンクできない場合は、目的の結果を得るために何ができますか?

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

答えて

2

基本的に、アクセス権でハッキングする必要があるため、説明する方法でフォルダへのアクセスを許可することは実際のセキュリティ上のリスクであり、些細なことではないため一般的には避けてください。あなたが望む行動を達成する方法は、これらの線に沿ったものです。

まず、空白のaspxまたはashxページを作成します。

第二に、いずれかのあなたは、私はこれをテストし、それはいくつかのtweeksが、上記のコードが必要になる場合がありますので、私の頭からそれを取っていない

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(); 

次の行に沿ってコードを使用したいPage_LoadまたはProcessRequestで人のブラウザにあなたが提供するファイルのダウンロードを開始させる正しい軌道に乗るべきです。

編集:あなたの問題は私が思っていたものと少し違っていました。あなたの問題を解決するには、説明したようにリクエストを処理できるページへのリンクを使用しています。上記。 IE:ashxまたはaspxページ

+0

大きな回答をいただきありがとうございます!私はこれを試して、それがどうなるか見てみよう。 – CptSupermrkt

+0

いいえ、幸運。うまくいけば、これは正しい軌道に乗るでしょう。 –

+0

うわー、私は実際にこれで動作しました! – CptSupermrkt

0

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

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

+0

ありがとうございます。私はこれを考慮しましたが、ローカル開発環境でこれをどのようにシミュレートできるかわかりません。 IISにサイトを公開すると意味がありますが、IISがインストールされていない開発マシンでは... – CptSupermrkt