【问题标题】:How to create a (cross browser compatible) hyperlink that opens a file on a network drive?如何创建在网络驱动器上打开文件的(跨浏览器兼容)超链接?
【发布时间】:2015-07-14 20:09:52
【问题描述】:

我想使用带有 C# 的 ASP.NET 从网络上的共享文件夹中打开文档。 我的情况如下:

  1. 我的 Web 服务器名称是“WebServer1”,使用 IIS 7
  2. 我的 DC 服务器名称是“DC1”
  3. 我的文件服务器名称“FileServer1”
  4. 我的文件路径 \\FileServer1\A\B\C\MyDoc.docx\\FileServer1\A\B\C\MyPDF.pdf

我尝试了以下

1- 我创建了超链接

<a href="file:///// FileServer1\A\B\C\MyDoc.docx" target="_blank">link to file</a> 

文件在某些​​使用 Internet Explorer 版本 8 的机器上打开,但在任何其他版本或 Chrome、Fire Fox 或任何其他网络浏览器上打开,当我单击超链接时它不起作用,没有任何操作发生,也没有错误,但是如果我复制了链接地址并将其粘贴到网络浏览器中,文件就会打开

我将文件服务器中的路径授予“所有人”的完全控制权限

2- 我也尝试使用以下代码创建一个按钮

Response.ContentType = 
    "application/vnd.openxmlformats- officedocument.wordprocessingml.document";
Response.AppendHeader("Content-Disposition", "attachment; filename=5401-1-2289.docx");
Response.Redirect("file:///// FileServer1\A\B\C\MyDoc.docx");
Response.Flush();

【问题讨论】:

  • file:///// 在最后一个 / 之后包含一个空格,对吗?
  • 使用Content-Disposition: attachment时,需要将文件写入输出,不能使用Redirect。您可以使用Response.TransmitFile(@"\\FileServer1\A\B\C\MyDoc.docx"); 之类的东西至于超链接/重定向,它需要用户有权访问共享驱动器,而不是网络服务器。而且它只能在 Outlook / IE / Word 等中运行,按设计 - stackoverflow.com/questions/1369147/…

标签: c# asp.net iis cross-browser


【解决方案1】:

首先,网址不正确。它应该是 @"file://\\FileServer1\A\B\C\MyDoc.docx" 而不是 "file:///// FileServer1\A\B\C\MyDoc.docx"(我很难认为这实际上可以编译,因为你没有逃脱 \...)

其次,您在评论中结合了发送内容、重定向和pointed out by Luaan。这行不通。

您可以直接传输文件。这也可以防止您将网络驱动器暴露给外部用户:

Response.TransmitFile(@"\\FileServer1\A\B\C\MyDoc.docx");

【讨论】:

  • 实际上,file:///// 是正确的前缀——这就是 IE 的约定。但这仍然是重点——它只是一个 IE 约定,它只存在于 ActiveDesktop 和类似的东西(它在 IE 9 中已被弃用)。出于安全原因,浏览器不再支持此功能。
  • 啊,好吧。感谢您指出了这一点。它仍然是 IE 特有的,不应该使用,所以我会在帖子中保留它。而且它不应该编译...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 2017-01-20
  • 1970-01-01
  • 2011-02-03
  • 2013-02-06
相关资源
最近更新 更多