【问题标题】:ASP Classic download file scriptASP Classic 下载文件脚本
【发布时间】:2013-11-04 21:28:34
【问题描述】:

我有一个使用 ASP Classic 构建的网站,但在使用允许用户下载文件但隐藏文件路径的脚本时遇到了一些问题。

当用户在页面上时,他们会看到一个链接。链接编码如下:

<a href="download.asp?file=FILE-NAME-HERE" target="_blank">Download File</a>

此链接将他们带到 download.asp,其中运行代码以获取文件并交付它。这是我现在的代码:

<%
const adTypeBinary = 1
dim strFilePath, strFile

strFilePath = "/_uploads/private/" 
strFile = Request.QueryString("file") 

if strFile <> "" then
    'Set the content type to the specific type that you are sending.
     Response.ContentType = "application/octet-stream"
     Response.AddHeader "Content-Disposition", "attachment; filename=" & strFile

     set objStream = Server.CreateObject("ADODB.Stream")
     objStream.open
     objStream.type = adTypeBinary
     objStream.LoadFromFile(strFilePath & strFile)

    response.binarywrite objStream.Read

    objStream.close
    Set objStream = nothing

end if
%>

这段代码是我从本网站 (How to download the files using vbscript in classic asp) 和 http://support.microsoft.com/kb/276488 的两个问题中汇总而成的

然而,发生的事情是 download.asp 页面给了我一个“找不到文件”错误,即使该文件正确地位于 Web 目录“/_uploads/private/”中。

文件类型可以是几种之一,包括 pdf、xls、docx 等。

我的代码中是否存在不允许找到该文件的内容?

【问题讨论】:

  • IIS 是否对该文件夹具有读取权限?
  • 是的,“/_uploads/private/”文件夹的当前权限值为 755。
  • 尝试整个盘符+路径。
  • 您可以尝试使用Server.MapPath解析路径,即objStream.LoadFromFile(Server.MapPath(strFilePath &amp; strFile))

标签: asp-classic vbscript


【解决方案1】:

感谢以上 cmets 中的用户 oracle 认证专业人士。

有效的是添加“Server.MapPath”来解析文件位置。

而不是使用:

objStream.LoadFromFile(strFilePath & strFile)

我改成:

objStream.LoadFromFile(Server.MapPath(strFilePath & strFile))

现在链接触发文件正确下载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-29
    • 2021-01-27
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多