上传后访问请求(ASP经典)

Access request after upload (ASP classic)

因此,正如我发现的那样,当我有一个带有 enctype="multipart/form-data" 的表单并上传文件时,我无法再访问对象 request。显示以下错误:

Cannot use the generic Request collection after calling BinaryRead.

在检查了一些资源之后,我偶然发现了一个声明,上面写着:"This is by design"。嗯,好吧,这里不是来评判设计决策的。

为了让您快速了解一下,让我向您介绍一下代码:

if request("todo") = "add" then
    Set Form = New ASPForm 
    category = request("category")
    title = request("title")

    if len(Form("upload_file").FileName) > 0 then 
        filename = Form("upload_file").FileName 
        DestinationPath = Server.mapPath("personal/allrounder/dokumente/")
        Form.Files.Save DestinationPath 
    end if          
end if

到目前为止没有什么特别的。但是后来,当我尝试访问我的 request 对象时,出现了上述错误:

<% if request("todo") = "new" then %> 
...

我现在的问题是,如何摆脱它或修复它。如果有其他方法,我不想在弹出窗口中打开上传。这是我唯一能想到的解决方案。

完美地是一个对象,它检查 Formrequest。或者,也许在文件顶部进行检查,我必须使用哪个对象?

感谢您的任何建议。

曾经有一个非常流行的ASPclass/component解决了ASP文件上传问题。该组件的站点已被删除,但代码镜像如下:

https://github.com/romuloalves/free-asp-upload

您可以将此 ASP 页面包含在您自己的页面中,并在您的页面上实例化 class 以访问表单中的文件以及表单变量。这是一段示例代码(Upload.Form 访问表单字段):

Dim uploadsDir : uploadsDir = server.mapPath(".")   ' whatever you want

Dim Upload, ks, fileKey, mailto
Set Upload = New FreeASPUpload
    call Upload.Save(uploadsDir)
    ks = Upload.UploadedFiles.keys
    for each fileKey in ks
        Response.write(fileKey & " : " & Upload.UploadedFiles(fileKey).FileName & "<br/>") 
    next
    mailto = Upload.form("mailTo")
Set Upload = Nothing

如果你想坚持自己的实现,你可能可以通过查看他们用来这样做的代码来弄清楚如何在 multipart/form-data 编码的数据流中获取表单变量。