C# 使用ASP.NET打开服务器上的物理文件

C# 使用ASP.NET打开服务器上的物理文件,c#,asp.net,.net,hyperlink,download,C#,Asp.net,.net,Hyperlink,Download,我想单击超链接打开服务器上的物理文件 <asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#Eval("FullPath") %>' runat="server" Text="Open File" ></asp:HyperLink> “完整路径”类似于“E:\PINCDOCS\Mydoc.pdf” 目前在Chrome中,我得到了错误 不允许加载本地资源: 这是可以做到的还是其他任何替代

我想单击超链接打开服务器上的物理文件

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

“完整路径”类似于“E:\PINCDOCS\Mydoc.pdf”

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

不允许加载本地资源:

这是可以做到的还是其他任何替代解决方案?

//来源
//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;
}
//ful_路径是c#函数名 //C#: 受保护的字符串路径(对象ob) { 字符串img=@Request.PhysicalApplicationPath/image/。。。; 返回img; }
物理文件应位于IIS网站、虚拟目录或Web应用程序中。因此,您需要创建一个虚拟目录来访问E:\docs。有关说明,请参见此处:


然后在您的代码中,您可以使用如下代码:获取物理文件的Url。

当您将NavigateUrl设置为FullPath时,Chrome将看到访问站点的用户机器的本地链接,而不是服务器本身

因此,您始终需要将任何hyberlink的URL设置为//someURL或

在您的情况下,您必须删除
NavigateUrl
并添加
OnClick
处理程序,在处理程序中,您将使用文件流读取文件,并将文件内容写入响应流,然后刷新它

单击处理程序的示例:

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;
    }
}

使用链接按钮;为按钮添加事件处理程序;在服务器端打开文件(使用
server.MapPath方法
);然后以pdf格式传输。更好的方法是,如果可能的话,将该文件复制到静态资源目录中,并使用普通的超链接。要让客户端下载文件,您需要一个url,首先需要将服务器本地路径转换为url。这里有一个链接也可以这样做,如果您与服务器在同一个网络上,只需使用网络名即可:ie:\\servername\e$\PINCDOCS\Mydoc.pdf,这样您就不必使用IIS。