0

在我们的 ASP MVC 3 站点中,我们有一些指向 LAN 上文件的超链接(这是一个 Intranet 站点)。这些链接一直有效到今天.. 到那时没有一个链接可以工作。在今天之前,您可以单击链接并打开文件(通常是 .xlsx 电子表格)。

文件路径保存为数据库中的一个字段。在索引视图中,如果此attachment字段有内容,则在此表格单元格中使用带有回形针图像的超链接。这是视图中的代码:

    <td>
        @if (!String.IsNullOrWhiteSpace(item.Attachment))
        {
            <a href=@item.Attachment class="noLine"><img src="@Url.Content("~/Content/Images/attachment.png")" height="20px;" width="20px;"/></a>
        }            
    </td>

这是如何呈现此 HTML 的示例

<td>
    <a href="\\Prdhilfs03\l&amp;i-sales&amp;mkt\WORKAREA\Agencyservices\Shared\AIC\MasterListAttachments\AF.xls" class="noLine"></a>            
    <img src="/Content/Images/attachment.png" height="20px;" width="20px;">
</td>

如果我右键单击并复制链接地址,这就是我在剪贴板上得到的

file://Prdhilfs03/l&amp;i-sales&amp;mkt/WORKAREA/Agencyservices/Shared/AIC/MasterListAttachments/AF.xls

但是,如果我右键单击链接,选择“检查元素”,然后右键单击控制台中的锚链接并选择“复制链接地址”,我会得到:

http://localhost:2574///Prdhilfs03/l&amp;i-sales&amp;mkt/WORKAREA/Agencyservices/Shared/AIC/MasterListAttachments/AF.xls

任何帮助或建议将不胜感激。谢谢!

编辑

当我单击该链接时,我在 Chrome 控制台中收到以下错误消息:

Not allowed to load local resource: file://Prdhilfs03/l&amp;i-sales&amp;mkt/WORKAREA/Agencyservices/Shared/AIC/MasterListAttachments/AF.xls
4

3 回答 3

0

您是否尝试使用正斜杠。我的意思是,而不是

<a href="\\Prdhilfs03\l&amp;i-sales&amp;mkt\WORKAREA\Agencyservices\Shared\AIC\MasterListAttachments\AF.xls" class="noLine"></a>

使用

<a href="//Prdhilfs03/l&amp;i-sales&amp;mkt/WORKAREA/Agencyservices/Shared/AIC/MasterListAttachments/AF.xls" class="noLine"></a>

转换网址:

var links = document.querySelectorAll("a");
for(var i=0; i<links.length; i++) {
    var link = links[i];
    var url = link.getAttribute("href");
    if(url) {
        url = url.replace(/\\/g, "/");
        link.setAttribute("href", url);
    }
}
于 2013-09-05T21:44:11.020 回答
0

我将在 Karl 的回答中补充说您遇到了跨站点脚本问题。您拥有的另一种选择是拥有一个控制器,该控制器将相关文件作为 FileResult 返回。我们称之为 FileRouter。然后 FileRouter 将执行一个名为 Download 的操作,如下所示:

public FileContentResult Download(string path)
{
    return this.File(/* a stream to the path */);
}

然后,您将路径传递给控制器​​上的操作。因此,您将放置一个带有 Intranetserver/filerouter/download?path=path_to_file 目标的 Html.Action 链接,而不是直接链接

当然,这具有服务器不必要地从网络加载文件的缺点,但它是一个可供考虑的替代方案。

此外,使用 FilePathResult 也可以在这里工作,但我没有任何经验,所以不能在这里对其功效发表任何声明。

于 2013-09-11T17:50:20.383 回答
0

首先,在您的href 前面加上“file://”而不是“\\”,这将解决两个链接之间的差异。

其次,我相信您的问题与跨站点脚本有关。您的浏览器不想被欺骗从另一台服务器下载文件(我假设 \\Prdhilfs03 是与 Web 服务器不同的计算机)。

要使用 Chrome 验证此问题,请在您的 javascript 控制台打开时单击该链接,然后查看是否收到类似“不允许加载本地资源:”的错误消息。

编辑

好的,正如您的错误消息所证实的那样,您的网络浏览器阻止您从其他服务器下载文件以防止跨站点脚本。这里有一篇文章讨论了通过更改 chrome 设置来解决此问题的步骤,尽管另一种选择是将文件本地存储在 Web 服务器上。

于 2013-09-05T21:50:25.650 回答