我正在创建一个存储在我们网络驱动器上的pdf的超链接。问题是我通过ASP.net创建超链接,但点击链接绝对没有。如果您检查元素并单击链接,它就可以正常工作。它似乎与这个问题有关(HTML links to local network shares)。通过下载该主题中引用的Chrome扩展程序,我可以打开本地链接。在Internet Explorer中,我可以单击链接而不会出现任何问题或扩展名。
我通过配置值“System.Net.WebUtility.HtmlEncode(configValue)”填充NavigateNurl
这是我正在使用的路径(名称略有改动): 文件://unk-file01/forms%20engine/Templates/Fake/ES_User_Manual_GBA_FINAL_081514.pdf
<div id="manualMenu" runat="server">
<div id="manual">
<asp:HyperLink ID="ESUserManualLink" Target="_blank" runat="server" Text="GBA User Manual" >
GBA User Manual
</asp:HyperLink>
<asp:HyperLink ID="UnderwritingManualLink" Target="_blank" runat="server"
Text="GBA Underwriting Guide">
GBA Underwriting Guide
</asp:HyperLink>
</div>
</div>
除了在其他地方托管文件之外,除了托管文件之外,我还能做些什么来使这项工作跨所有平台?
答案 0 :(得分:2)
如果您可以使您的网址看起来像http://example.com/DownloadPdf.ashx?file=ES_User_Manual_GBA_FINAL_081514
,那么DownloadPdf.ashx的合适代码可能看起来像
Imports System.IO
Imports System.Web
Imports System.Web.Services
Public Class DownloadPdf
Implements System.Web.IHttpHandler
Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim fname = context.Request.QueryString("file")
Dim actualFile = Path.Combine("//unk-file01/forms engine/Templates/Fake", fname) & ".pdf"
If File.Exists(actualFile) Then
context.Response.ContentType = "application/pdf"
context.Response.AddHeader("Content-Disposition", "attachment; filename=""" & Path.GetFileName(actualFile) & """")
context.Response.TransmitFile(actualFile)
Else
context.Response.Clear()
context.Response.TrySkipIisCustomErrors = True
context.Response.StatusCode = 404
context.Response.Write("<html><head><title>404 - File not found</title><style>body {font-family: sans-serif;}</style></head><body><h1>404 - File not found</h1><p>Sorry, that file is not available .</p></body></html>")
context.Response.End()
End If
End Sub
ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
请注意,它会强制文件扩展名为.pdf - 您可以添加其他安全性,例如阻止目录遍历并检查用户是否可以访问该文件。
代码未按原样进行测试,但其派生的代码适用于生产环境(确实具有更高的安全性)。