3

ハイパーリンクをクリックしてサーバー上の物理ファイルを開きたいです。

<asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#Eval("FullPath") %>' runat="server" Text="Open File" ></asp:HyperLink>

「フルパス」は「E:\PINCDOCS\Mydoc.pdf」のようなものです

現在Chromeでエラーが発生しています。

ローカル リソースのロードが許可されていません:

これを行うことはできますか、または他の代替ソリューションはありますか?

4

3 に答える 3

2

物理ファイルは、IIS Web サイト、仮想ディレクトリ、または Web アプリケーション内に配置する必要があります。そのため、E:\PINCDOCS に仮想ディレクトリを作成する必要があります。手順については、 http ://support.microsoft.com/kb/172138 を参照してください。

次に、コード ビハインドで次のようなコードを使用できます: http://geekswithblogs.net/AlsLog/archive/2006/08/03/87032.aspx物理ファイルの URL を取得します。

于 2013-05-15T09:28:46.953 に答える
0

NavigateUrl を FullPath に設定すると、Chrome には、サーバー自体ではなく、サイトにアクセスしているユーザー マシンにローカルなリンクが表示されます。

そのため、ハイパーリンクの URL を常に //someURL またはhttp://someurlの形式にする必要があります。

あなたの場合、ハンドラーを削除しNavigateUrlて追加する必要OnClickがあり、ハンドラー内で、FileStream を使用してファイルを読み取り、ファイルの内容を応答ストリームに書き込み、それをフラッシュします。

クリック ハンドラーの例:

context.Response.Buffer = false;
context.Response.ContentType = "the file mime type, ex: application/pdf";
string path = "the full path, ex:E:\PINCDOCS";

FileInfo file = new FileInfo(path);
int len = (int)file.Length, bytes;
context.Response.AppendHeader("content-length", len.ToString());
byte[] buffer = new byte[1024];
Stream outStream = context.Response.OutputStream;
using(Stream stream = File.OpenRead(path)) {
    while (len > 0 && (bytes =
        stream.Read(buffer, 0, buffer.Length)) > 0)
    {
        outStream.Write(buffer, 0, bytes);
        len -= bytes;
    }
}
于 2016-09-29T13:16:37.710 に答える
0
//SOURCE
<asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#ful_path(Eval("")) %>' runat="server" Text="Open File" ></asp:HyperLink>//ful_path is c# function name

//C#:
protected string ful_path(object ob)
{
    string img = @Request.PhysicalApplicationPath/image/...;
    return img;
}
于 2013-05-15T05:57:25.940 に答える