现在我们知道了实际错误,可以制定一个答案。
不允许加载本地资源
是Chrome和其他现代浏览器内置的安全异常。措辞可能不同,但它们都以某种方式设置了安全异常来处理此场景。
过去,您可以覆盖某些设置或应用某些标志,例如
--disable-web-security --allow-file-access-from-files --allow-file-access
在Chrome中 (请参见https://dev59.com/7nzaa4cB1Zd3GeqPWfCK#22027002)
这是有原因的
然而,值得指出的是,这些安全异常存在是有充分理由的,试图规避它们并不是最好的想法。
还有另一种方法
作为已经可以访问Classic ASP的用户,您可以构建一个中间页面来提供基于网络的文件。您可以使用
ADODB.Stream
对象和
Response.BinaryWrite()
方法的组合来实现这一点。这样做可以确保客户端永远不会暴露网络文件位置,并且由于脚本的灵活性,它可以用于从多个位置和多种文件类型加载资源。
以下是一个基本示例(“getfile.asp”):
<%
Option Explicit
Dim s, id, bin, file, filename, mime
id = Request.QueryString("id")
Select Case id
Case "TESTFILE1"
file = "\\server\share\Projecten\Protocollen\346\Uitvoeringsoverzicht.xls"
mime = "application/vnd.ms-excel"
filename = "Uitvoeringsoverzicht.xls"
Case ...
End Select
If Len(file & "") > 0 Then
Set s = Server.CreateObject("ADODB.Stream")
s.Type = adTypeBinary
Call s.Open()
Call s.LoadFromFile(file)
bin = s.Read()
Call s.Close()
Set s = Nothing
Response.ContentType = mime
Call Response.AddHeader("Content-Disposition", "attachment;filename=" & filename)
Call Response.BinaryWrite(bin)
Else
Response.Status = "404 Not Found"
End If
%>
这个例子是伪代码,因此未经过测试。
然后可以在
<a>
中使用此脚本来返回资源;
<a href="/getfile.asp?id=TESTFILE1">Click Here</a>
这种方法可以进一步考虑,特别是对于较大的文件。可以使用
Response.IsConnected
检查客户端是否仍在连接,并使用
s.EOS
属性在读取块时检查流的结束。您还可以添加查询字符串参数以设置文件是返回内联还是提示下载。
有用的链接
"_blank"
而不是"_new window"
作为目标? - user1945782rootRs("pre_rootpad")
和rootRs("rootpad_protocollen")
内部是什么,因此显示该代码并没有帮助。我们需要看到生成的HTML输出(如@Rich所建议的那样),最好不要以C:\
开头。 - user692942