从另一台服务器(ASP.Net C#)打开intranet中的文件
本文关键字:intranet 打开 文件 Net 服务器 一台 ASP | 更新日期: 2023-09-27 18:30:03
我有个问题。我的WebApp必须在浏览器中从另一台服务器上的本地资源打开文件,如果浏览器不支持它,则使用相关程序打开它。例如,一些PDF、DOCX、XLSX文件。该服务器的路径存储在DB中,如下所示:''server2''folder''file.pdf
我不得不说,我尝试了我能找到的一切,但我也发现没有解决方案。但我真的需要弄清楚。
我的应用程序是ASP.Net AJAX,C#和Telerik组件
我尝试过的:
- <a href="''server2'folder'file.pdf">link</a>
- <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Link") %>' Target="_blank">HyperLink</asp:HyperLink>
- Responce.Redirect(path)
它不起作用,Chrome的响应是:
不允许加载本地资源:file://server2/folder/file.pdf
有办法吗?
编辑-修改了问题的规范
如果客户端将从内部网络外部访问此链接,则需要在服务器端打开文件并将其流式传输到客户端。这需要使用您想要的路径链接到服务器应用程序中的一个新页面,然后使用该新页面将文件流式传输到客户端。例如,您的链接如下所示:
<a href="/DownloadFile.aspx?path=''server2'folder'file.pdf">Link</a>
然后在DownloadFile.aspx代码隐藏中,您会看到这样的内容:
var path = Request.QueryString["path"];
Response.WriteFile(path);
指定类似的资源URL
<a href="file://///server2/folder/file.pdf">link</a>
对于那些和我有类似问题的人,有我的解决方案。
没有办法做到这一点。所以我不得不创建一个带有文件路径的参数的新页面。然后创建一个内存流并将其发送到客户端。
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString.AllKeys.Contains("path"))
{
string path = Server.UrlDecode(Request.QueryString["path"]);
if (!(new FileInfo(path).Exists))
return;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
SetStream(fs);
}
}
}
private void SetStream(Stream stream)
{
byte[] bytes = new byte[(int)stream.Length];
stream.Read(bytes, 0, (int)stream.Length);
Response.Buffer = true;
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=" + Server.UrlDecode(Request.QueryString["name"]));
Response.BinaryWrite(bytes);
Response.Flush();
}