我有一个重要的脑筋急转弯。
我想用经典的 ASP 打开一个文件。我正在使用各种变量,因为事情可能会改变,但结果是正确的。我知道这一点是因为我已经通过复制链接地址并将其放在我的 URL 中来测试结果。现在的问题是:如果我点击我的链接,它不会做任何事情。不是刷新,不是重定向。没有什么。有谁知道我做错了什么?
好的,这就是交易。我的文件并不总是本地的,这取决于我所处的环境。如果我复制粘贴我的网址的结果,它会下载。如果我单击我的 URL,它不会响应。有任何想法吗?浏览器问题? (虽然我已经测试了 5 个浏览器)还是别的什么?我真的被困在这里,互联网似乎并不在我身边。
我有3个环境。这里下面的变量是为了使链接有效。我知道该链接有效,因为我已经通过复制对其进行了测试。是的,它确实以 file:///
开头,是的,我确定链接是正确的。
这是我的代码行:
response.write("<td class='tab_kolom2'><a href='"&rootRs("pre_rootpad")&rootRs("rootpad_protocollen")&"\"&overzichtRs("Formuliernr")&"\Uitvoeringsoverzicht.xls' target='_blank' download>Click here</a></td>")
编辑:带有错误/链接结果的屏幕截图
原文由 Benny Niemeijer 发布,翻译遵循 CC BY-SA 4.0 许可协议
现在我们知道实际的错误是什么,可以得出一个答案。
是 Chrome 和其他现代浏览器中内置的安全异常。措辞可能不同,但在某种形式或形式上,它们都有安全例外来处理这种情况。
在过去,您可以覆盖某些设置或应用某些标志,例如
在 Chrome 中 (参见 https://stackoverflow.com/a/22027002/692942 )
还有另一种方式
由于您已经可以访问 Classic ASP,因此您始终可以构建一个为基于网络的文件提供服务的中间页面。您可以使用
ADODB.Stream
对象和Response.BinaryWrite()
方法的组合来执行此操作。这样做可确保您的网络文件位置永远不会暴露给客户端,并且由于脚本的灵活性,它可用于从多个位置和多种文件类型加载资源。这是一个基本示例(“getfile.asp”):
此示例是伪编码的,因此未经测试。
然后可以在
<a>
中使用这个脚本来返回资源;可以进一步采用这种方法并考虑 (特别是对于较大的文件) 使用
Response.IsConnected
检查客户端是否仍然存在和s.EOS
属性以检查结束正在读取块时的流。您还可以添加到查询字符串参数以设置是否希望文件以内联方式返回或提示下载。有用的链接
使用
METADATA
导入 DLL 常量- 如果您无法识别adTypeBinary
,总是比硬编码1
更好。Content-Disposition:“inline”和“attachment”有什么区别? - 关于
Content-Disposition
如何在客户端上运行的有用信息。