我想在HyperLink上打开服务器上的物理文件。
<asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#Eval("FullPath") %>' runat="server" Text="Open File" ></asp:HyperLink>
“FullPath”类似于“E:\ PINCDOCS \ Mydoc.pdf”
目前在Chrome中我遇到错误。
不允许加载本地资源:
可以这样做或任何其他替代解决方案吗?
答案 0 :(得分:2)
物理文件应位于IIS网站,虚拟目录或Web应用程序中。因此,您需要为E:\ PINCDOCS创建一个虚拟目录。请参阅此处获取说明:http://support.microsoft.com/kb/172138
然后在您的代码中,您可以使用以下代码:http://geekswithblogs.net/AlsLog/archive/2006/08/03/87032.aspx获取物理文件的Url。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
当您将NavigateUrl设置为FullPath时,Chrome会看到访问该网站的用户计算机的本地链接,而不是服务器本身。
因此,您始终需要将任何hyberlink的网址设为// 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;
}
}
答案 3 :(得分:0)
源:
<asp:Button id="Button1" Text="open file" OnClick="Button1_Click" runat="server"/>
C#:
//open file using full path:
protected void Button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = @"E:\PINCDOCS\Mydoc.pdf";
proc.Start();
}
或
//open file from your current project:
protected void Button1_Click(object sender, EventArgs e)
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = HttpContext.Current.Server.MapPath("~/Mydoc.pdf");
proc.Start();
}