3

我想在 HyperLink 单击时打开服务器上的物理文件。

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

“FullPath”就像“E:\PINCDOCS\Mydoc.pdf”

目前在 Chrome 中我得到了错误。

不允许加载本地资源:

可以这样做或任何其他替代解决方案吗?

4

3 回答 3

2

物理文件应位于 IIS 网站、虚拟目录或 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
//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 回答
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 回答