web-dev-qa-db-ja.com

ファイルサーバー上のファイルへのダウンロードリンクの作成

(簡単に、優先的に;))別のファイルサーバー上のファイルへのダウンロードリンクを作成する方法を探しています。

状況は次のとおりです。私が開発しているアプリケーション(vb.netのasp.net 2.0ですが、c#でも同様の問題があり、どちらのソリューションでも機能します)は会社の内部で実行されます。良い習慣として、ファイルストレージとWebアプリケーションは2つの別々のサーバー上にあります。

基本的に、ファイルへのダウンロードリンクを作成できる必要があります。ファイルにアクセスする必要があるのは、\ servername\folder1\folder2\folder3\file.txt(どのような種類のファイルでもかまいません)

Webリンクが機能しない。これが現在設定されている方法です。

tablerowfield.Text = String.Format(
    "<a href=""\\servername\folder1\folder2\folder3\{0}"" 
        target=""_blank"">Click me</a>",
    filename)

これは明らかな理由で機能しません。以前は、そのファイルをアプリケーションパス自体に書き込むように設定されていて、完全に機能していましたが、それはお勧めできません。そのため、私はそれを変更(または変更)しようとしています。

ダウンロードページを作成し、リンクを保持し、ダウンロード用の適切なWeb URLを返すテーブルをDBに作成することに関する解決策を読みましたが、残念なことに直面している時間の制約により、開発できません。

上記のようにファイルへの完全なファイルパスを文字列で指定できると仮定すると、リンクをクリックしてドキュメントをダウンロードするリンクを作成する最も簡単な方法は何ですか?

注:この環境では管理者権限がありません。それは本当に私を助けていません。上記のような正しいリンクが与えられていて、適切なファイルアクセス権などがあるとします。

更新:

上記の例はIEでは機能しますが、FirefoxおよびChromeでは機能しません。 IEは、それを想定どおりに実行するfile:// servername/...リンクに変換しますが、FFとChromeの両方がこれが安全ではなく、ブラウザから無効になっています。

11
Flater

ASHXファイル(たとえば、downloadfile.ashx)を使用して、次のコード(テストされていませんが、そのようなものになります)を使用できます。

 Response.Clear();
 Response.ContentType = "application/octet-stream";
 Response.AddHeader("Content-Disposition", "attachment; filename=abc.txt");                                            
 Response.WriteFile(Server.MapPath("\\servername\folder1\folder2\folder3\abc.txt"));
 Response.End();

次に、これをアンカータグで次のように使用します。

<a href="downloadfile.ashx"  target=""_blank"">Click me</a>

注:次のように、さまざまなファイルをダウンロードするためのパラメータを渡すこともできます。

<a href="downloadfile.ashx?file=abc.txt"  target=""_blank"">Click me</a>

次に、ashxファイルで、ファイル名を使用して適切なファイルをダウンロードします。

19
wasimbhalli

このコードは、ダウンロードフォルダーにname = hi.txtのファイルを作成し、コンテンツは「ありがとう、最終的にファイルがダウンロードされました」という内容になります。

 Response.Clear();
 Response.ContentType = "application/octet-stream";
 Response.AddHeader("Content-Disposition", "attachment; filename=hi.txt");
 Response.Write("thanks god, finally file got downloaded.");
 Response.End();
2
Narottam Goyal

ファイルがすでにサーバーにある場合は、このコードをダウンロードボタンのクリックイベントで次のように使用できます。

protected void downloadpdf_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment; filename=""downloadName.pdf""");
    Response.WriteFile(Server.MapPath(@"~/path of pdf/actualfile.pdf"));
    Response.End();
}
0
user2766067