Javascript 如何在服务器端经典ASP页面中引用上载的文件?

Javascript 如何在服务器端经典ASP页面中引用上载的文件?,javascript,ajax,asp-classic,Javascript,Ajax,Asp Classic,我正在尝试通过Ajax将文件上传到用经典ASP编写的服务器端脚本 这是相关的HTML和JavaScript代码: <input type="file" id="fileInput" /> 我的问题是:如何在我的经典ASP页面(post.ASP)中获取上传文件的引用 在PHP中,有一个全局变量$u FILES可用,它将包含以下内容: Array ( [image] => Array ( [name] => cat.png [type] =>

我正在尝试通过Ajax将文件上传到用经典ASP编写的服务器端脚本

这是相关的HTML和JavaScript代码:

<input type="file" id="fileInput" />
我的问题是:如何在我的经典ASP页面(post.ASP)中获取上传文件的引用

在PHP中,有一个全局变量$u FILES可用,它将包含以下内容:

Array
(
  [image] => Array
  (
    [name] => cat.png
    [type] => image/png
    [tmp_name] => /tmp/phpOjXMW3
    [error] => 0
    [size] => 10603
  )
)
经典ASP中是否有类似的功能?


这是帖子页面:

Set upl = New FileUploader 
upl.Upload()
If upl.Files.Count = 1 Then
  For Each File In upl.Files.Items
    If File.FileSize < 100000 Then
      File.FileName =  upl.Form ("id") & ".jpg"
      File.SaveToDisk Server.MapPath("/Images")
  next
end if
Class FileUploader
    Public  Files
    Private mcolFormElem

    Private Sub Class_Initialize()
        Set Files = Server.CreateObject("Scripting.Dictionary")
        Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
    End Sub

    Private Sub Class_Terminate()
        If IsObject(Files) Then
            Files.RemoveAll()
            Set Files = Nothing
        End If
        If IsObject(mcolFormElem) Then
            mcolFormElem.RemoveAll()
            Set mcolFormElem = Nothing
        End If
    End Sub

    Public Property Get Form(sIndex)
        Form = ""
        If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
    End Property

    Public Default Sub Upload()
        Dim biData, sInputName
        Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
        Dim nPosFile, nPosBound
    'response.Flush

        biData = Request.BinaryRead(Request.TotalBytes)
        nPosBegin = 1
        nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))

        If (nPosEnd-nPosBegin) <= 0 Then Exit Sub

        vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
        nDataBoundPos = InstrB(1, biData, vDataBounds)

        Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))

            nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
            nPos = InstrB(nPos, biData, CByteString("name="))
            nPosBegin = nPos + 6
            nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
            sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
            nPosBound = InstrB(nPosEnd, biData, vDataBounds)

            If nPosFile <> 0 And  nPosFile < nPosBound Then
                Dim oUploadFile, sFileName
                Set oUploadFile = New UploadedFile

                oUploadFile.FormElement = MidB(biData, nPos, 5)


                nPosBegin = nPosFile + 10
                nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
                sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
                oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))

                nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
                nPosBegin = nPos + 14
                nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))

                oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))

                nPosBegin = nPosEnd+4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)

                If oUploadFile.FileSize > 0 Then Files.Add LCase(sInputName), oUploadFile
            Else
                nPos = InstrB(nPos, biData, CByteString(Chr(13)))
                nPosBegin = nPos + 4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            End If

            nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
        Loop
    End Sub

    'String to byte string conversion
    Private Function CByteString(sString)
        Dim nIndex
        For nIndex = 1 to Len(sString)
           CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
        Next
    End Function

    'Byte string to string conversion
    Private Function CWideString(bsString)
        Dim nIndex
        CWideString =""
        For nIndex = 1 to LenB(bsString)
           CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1))) 
        Next
    End Function
End Class

Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData
    Public FormElement

    Public Property Get FileSize()
        FileSize = LenB(FileData)
    End Property

    Public Sub SaveToDisk(sPath)
        Dim oFS, oFile
        Dim nIndex

        If sPath = "" Or FileName = "" Then Exit Sub
        If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"

        Set oFS = Server.CreateObject("Scripting.FileSystemObject")
        If Not oFS.FolderExists(sPath) Then Exit Sub

        Set oFile = oFS.CreateTextFile(sPath & FileName, True)

        For nIndex = 1 to LenB(FileData)
            oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
        Next

        oFile.Close
    End Sub

    Public Sub SaveToDatabase(ByRef oField)
        If LenB(FileData) = 0 Then Exit Sub

        If IsObject(oField) Then
            oField.AppendChunk FileData
        End If
    End Sub

End Class
Set upl=New FileUploader
upl.Upload()
如果upl.Files.Count=1,则
对于upl.Files.Items中的每个文件
如果File.FileSize<100000,则
File.FileName=upl.Form(“id”)和“.jpg”
File.SaveToDisk Server.MapPath(“/Images”)
下一个
如果结束
这是帖子页面顶部的一个包含:

Set upl = New FileUploader 
upl.Upload()
If upl.Files.Count = 1 Then
  For Each File In upl.Files.Items
    If File.FileSize < 100000 Then
      File.FileName =  upl.Form ("id") & ".jpg"
      File.SaveToDisk Server.MapPath("/Images")
  next
end if
Class FileUploader
    Public  Files
    Private mcolFormElem

    Private Sub Class_Initialize()
        Set Files = Server.CreateObject("Scripting.Dictionary")
        Set mcolFormElem = Server.CreateObject("Scripting.Dictionary")
    End Sub

    Private Sub Class_Terminate()
        If IsObject(Files) Then
            Files.RemoveAll()
            Set Files = Nothing
        End If
        If IsObject(mcolFormElem) Then
            mcolFormElem.RemoveAll()
            Set mcolFormElem = Nothing
        End If
    End Sub

    Public Property Get Form(sIndex)
        Form = ""
        If mcolFormElem.Exists(LCase(sIndex)) Then Form = mcolFormElem.Item(LCase(sIndex))
    End Property

    Public Default Sub Upload()
        Dim biData, sInputName
        Dim nPosBegin, nPosEnd, nPos, vDataBounds, nDataBoundPos
        Dim nPosFile, nPosBound
    'response.Flush

        biData = Request.BinaryRead(Request.TotalBytes)
        nPosBegin = 1
        nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))

        If (nPosEnd-nPosBegin) <= 0 Then Exit Sub

        vDataBounds = MidB(biData, nPosBegin, nPosEnd-nPosBegin)
        nDataBoundPos = InstrB(1, biData, vDataBounds)

        Do Until nDataBoundPos = InstrB(biData, vDataBounds & CByteString("--"))

            nPos = InstrB(nDataBoundPos, biData, CByteString("Content-Disposition"))
            nPos = InstrB(nPos, biData, CByteString("name="))
            nPosBegin = nPos + 6
            nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(34)))
            sInputName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            nPosFile = InstrB(nDataBoundPos, biData, CByteString("filename="))
            nPosBound = InstrB(nPosEnd, biData, vDataBounds)

            If nPosFile <> 0 And  nPosFile < nPosBound Then
                Dim oUploadFile, sFileName
                Set oUploadFile = New UploadedFile

                oUploadFile.FormElement = MidB(biData, nPos, 5)


                nPosBegin = nPosFile + 10
                nPosEnd =  InstrB(nPosBegin, biData, CByteString(Chr(34)))
                sFileName = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
                oUploadFile.FileName = Right(sFileName, Len(sFileName)-InStrRev(sFileName, "\"))

                nPos = InstrB(nPosEnd, biData, CByteString("Content-Type:"))
                nPosBegin = nPos + 14
                nPosEnd = InstrB(nPosBegin, biData, CByteString(Chr(13)))

                oUploadFile.ContentType = CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))

                nPosBegin = nPosEnd+4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                oUploadFile.FileData = MidB(biData, nPosBegin, nPosEnd-nPosBegin)

                If oUploadFile.FileSize > 0 Then Files.Add LCase(sInputName), oUploadFile
            Else
                nPos = InstrB(nPos, biData, CByteString(Chr(13)))
                nPosBegin = nPos + 4
                nPosEnd = InstrB(nPosBegin, biData, vDataBounds) - 2
                If Not mcolFormElem.Exists(LCase(sInputName)) Then mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            End If

            nDataBoundPos = InstrB(nDataBoundPos + LenB(vDataBounds), biData, vDataBounds)
        Loop
    End Sub

    'String to byte string conversion
    Private Function CByteString(sString)
        Dim nIndex
        For nIndex = 1 to Len(sString)
           CByteString = CByteString & ChrB(AscB(Mid(sString,nIndex,1)))
        Next
    End Function

    'Byte string to string conversion
    Private Function CWideString(bsString)
        Dim nIndex
        CWideString =""
        For nIndex = 1 to LenB(bsString)
           CWideString = CWideString & Chr(AscB(MidB(bsString,nIndex,1))) 
        Next
    End Function
End Class

Class UploadedFile
    Public ContentType
    Public FileName
    Public FileData
    Public FormElement

    Public Property Get FileSize()
        FileSize = LenB(FileData)
    End Property

    Public Sub SaveToDisk(sPath)
        Dim oFS, oFile
        Dim nIndex

        If sPath = "" Or FileName = "" Then Exit Sub
        If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\"

        Set oFS = Server.CreateObject("Scripting.FileSystemObject")
        If Not oFS.FolderExists(sPath) Then Exit Sub

        Set oFile = oFS.CreateTextFile(sPath & FileName, True)

        For nIndex = 1 to LenB(FileData)
            oFile.Write Chr(AscB(MidB(FileData,nIndex,1)))
        Next

        oFile.Close
    End Sub

    Public Sub SaveToDatabase(ByRef oField)
        If LenB(FileData) = 0 Then Exit Sub

        If IsObject(oField) Then
            oField.AppendChunk FileData
        End If
    End Sub

End Class
类文件上传程序
公共文件
二等兵
私有子类_Initialize()
Set Files=Server.CreateObject(“Scripting.Dictionary”)
设置mcolFormElem=Server.CreateObject(“Scripting.Dictionary”)
端接头
私有子类_Terminate()
如果是IsObject(文件),则
Files.RemoveAll()文件
设置文件=无
如果结束
如果是IsObject(mcolFormElem),则
mcolFormElem.RemoveAll()
设置mcolFormElem=Nothing
如果结束
端接头
公共财产获取表(sIndex)
Form=“”
如果mcolFormElem.存在(LCase(sIndex)),则Form=mcolFormElem.项(LCase(sIndex))
端属性
公共默认子上载()
Dim biData,sInputName
Dim nPosBegin、nPosEnd、NPO、vDataBounds、nPosEnd
暗nPosFile,nPosBound
”回答
biData=Request.binarydead(Request.TotalBytes)
nPosBegin=1
nPosEnd=InstrB(nPosBegin、biData、cbytesting(Chr(13)))
如果(nPosEnd nPosBegin)0,则文件。添加LCase(sInputName),然后加载文件
其他的
nPos=InstrB(nPos,biData,cbytesting(Chr(13)))
nPosBegin=nPos+4
nPosEnd=InstrB(nPosBegin、biData、vDataBounds)-2
如果mcolFormElem.不存在(LCase(sInputName)),则mcolFormElem.添加LCase(sInputName)、CWideString(MidB(biData、nPosBegin、nPosBegin))
如果结束
NadabillizePos=InstrB(NadabillizePos+LenB(vDataBounds)、biData、vDataBounds)
环
端接头
'字符串到字节字符串的转换
专用函数CByteString(sString)
暗九度
对于nIndex=1到Len(sString)
CByteString=CByteString&ChrB(AscB(Mid(sString,nIndex,1)))
下一个
端函数
'字节字符串到字符串的转换
专用函数CWideString(bsString)
暗九度
CWideString=“”
对于nIndex=1到LenB(bsString)
CWideString=CWideString&Chr(AscB(MidB(bsString,nIndex,1)))
下一个
端函数
末级
类上载文件
公共内容类型
公共文件名
公共文件数据
公共表单元素
公共属性获取文件大小()
FileSize=LenB(FileData)
端属性
公共子存储磁盘(sPath)
昏暗的
暗九度
如果sPath=“”或FileName=“”,则退出Sub
如果Mid(sPath,Len(sPath))“\”则sPath=sPath&“\”
Set of s=Server.CreateObject(“Scripting.FileSystemObject”)
如果不存在oFS.FolderExists(sPath),则退出Sub
Set of ile=oFS.CreateTextFile(sPath&FileName,True)
对于nIndex=1到LenB(FileData)
写Chr(AscB(MidB(FileData,nIndex,1)))
下一个
奥菲尔,关门
端接头
公共子存储数据库(ByRef of字段)
如果LenB(FileData)=0,则退出子系统
如果是IsObject(油田),则
oField.AppendChunk文件数据
如果结束
端接头
末级

上传文件后,您可以使用
FileSystemObject
检查文件是否存在,并通过
GetFile
方法检索其属性。使用函数可节省空间并返回属性字典,使其更易于引用:

函数getFileInfo(ByVal fileLocation) '使用MapPath转换为绝对路径 fileLocation=Server.MapPath(fileLocation) '使用保留字设置文件系统和字典对象 设置fileSystem=Server.CreateObject(“Scripting.FileSystemObject”) Set dictionary=Server.CreateObject(“Scripting.dictionary”) '检查文件是否存在 如果fileSystem.file存在(fileLocation),则 '使用GetFile检索文件属性 set file=fileSystem.GetFile(文件位置) '将每个属性添加到dictionary对象 dictionary.add“filefind”,true dictionary.add“Attributes”,file.Attributes dictionary.add“DateCreated”,file.DateCreated dictionary.add“DateLastAccessed”,file.DateLastAccessed dictionary.add“DateLastModified”,file.DateLastModified dictionary.add“Drive”,file.Drive dictionary.add“Name”,file.Name dictionary.add“ParentFolder”,file.ParentFolder dictionary.add“Path”,file.Path dictionary.add“ShortName”,file.ShortName dictionary.add“ShortPath”,file.ShortPath dictionary.add“Size”,file.Size dictionary.add“Type”,file.Type “属性翻译: “0=普通文件 '1=只读文件 '2=隐藏文件 '4=系统文件 '16=文件夹或目录 '32=自上次备份以来,文件已更改 '1024=链接或快捷方式 '2048=压缩文件 其他的 '找不到文件 dictionary.add“filefind”,false 如果结束 '返回字典对象 设置getFileInfo=dictionary '将所有对象设置为空 设置文件系统=无 设置字典=无 set file=nothing 端函数 检查文件是否已上载,以及