使用ASP.NET打开服务器上的物理文件
本文关键字:文件 服务器 ASP NET 使用 | 更新日期: 2023-09-27 18:13:41
我想在服务器上通过HyperLink点击打开一个物理文件。
<asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#Eval("FullPath") %>' runat="server" Text="Open File" ></asp:HyperLink>
"FullPath"就像"E:'PINCDOCS'Mydoc.pdf"
当前在Chrome中我得到错误。
不允许加载本地资源:
可以这样做吗?或者有其他的解决方案吗?
物理文件应该位于IIS网站、虚拟目录或Web应用程序中。因此,您需要创建一个虚拟目录到E:'PINCDOCS。请参阅此处获取说明:http://support.microsoft.com/kb/172138
然后在后面的代码中,您可以使用如下代码:http://geekswithblogs.net/AlsLog/archive/2006/08/03/87032.aspx获取物理文件的Url
//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;
}
当您将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;
}
}