Torna al Thread
Function UpLoad()
Dim bytArray
Dim bytecount
bytecount = Request.TotalBytes
if bytecount = 0 then
UpLoad = 0
exit function
end if
' continue only when bytecount>0
Set inputs = Server.CreateObject("Scripting.Dictionary")
bytArray = Request.BinaryRead(bytecount)
Dim objInput
Dim adLongVarChar
adLongVarChar = 201
Dim strByteToString
Dim lngLoop
Dim strIDInput
Dim lngStartPos
Dim lngFieldStartPos
Dim strInputHeader
Dim strContetType
Dim strInputName
Dim strFileName
Dim strFilePath
Dim strInputContent
Dim isFile
Dim rstTemp
' we using anrecordset object to quickly convert array of byte to string
Set rstTemp = Server.CreateObject("ADODB.Recordset")
rstTemp.Fields.Append "bytArray", adLongVarChar, lenb(bytArray)
rstTemp.Open
rstTemp.AddNew
rstTemp.Fields("bytArray").AppendChunk bytArray
rstTemp.Update
' we have getted the original string
strByteToString = rstTemp("bytArray")
Set rstTemp=Nothing
lngStartPos = 1
' get row separation
strIDInput = Mid(strByteToString, 1, InStr(1, strByteToString, vbCrLf) - 1)
' for each input field
While lngStartPos > 0
' resets all input variables
strInputHeader = ""
strContetType = ""
strInputContent = ""
strInputName = ""
strFileName = ""
strFilePath = ""
isFile = false
' skip row separation
lngStartPos = lngStartPos + Len(strIDInput) + 2
' gets current input header
strInputHeader = Mid(strByteToString, lngStartPos, InStr(lngStartPos, strByteToString, vbCrLf) + 2 - lngStartPos)
' skip input header
lngStartPos = lngStartPos + Len(strInputHeader)
' gets content type if any
strContetType = Mid(strByteToString, lngStartPos, InStr(lngStartPos, strByteToString, vbCrLf) + 2 - lngStartPos)
' skip content type
lngStartPos = lngStartPos + Len(strContetType)
If Len(strContetType) > 2 Then lngStartPos = lngStartPos + 2
' gets content input value
strInputContent = Mid(strByteToString, lngStartPos, InStr(lngStartPos, strByteToString, strIDInput) - 2 - lngStartPos)
' skip content type
lngStartPos = lngStartPos + Len(strInputContent) + 2
' gets input header fields
' gets "name" field
lngFieldStartPos = InStr(1, strInputHeader, "; name=", vbTextCompare) + 8
strInputName = Mid(strInputHeader, lngFieldStartPos, InStr(lngFieldStartPos, strInputHeader, Chr(34)) - lngFieldStartPos)
lngFieldStartPos = 0
' gets "filename" field if exists
lngFieldStartPos = InStr(1, strInputHeader, "; filename=", vbTextCompare)
If lngFieldStartPos > 0 Then
lngFieldStartPos = lngFieldStartPos + 12
strFilePath = Mid(strInputHeader, lngFieldStartPos, InStr(lngFieldStartPos, strInputHeader, Chr(34)) - lngFieldStartPos)
if len(strFilePath)>0 then
strFileName = Mid(strFilePath, InStrRev(strFilePath, "\", Len(strFilePath)) + 1)
strFilePath = Mid(strFilePath, 1, InStrRev(strFilePath, strFileName, Len(strFilePath)) - 1)
end if
End If
lngFieldStartPos = 0
'***********************************
' from this point we have all data
If strFileName <> "" Then
isFile = True
else
isFile = False
end if
' create the input object with current values
Set objInput = new clsInput
objInput.name = strInputName
objInput.isFile = isFile
objInput.content = strInputContent
objInput.size = len(strInputContent)
objInput.fileName = strFileName
objInput.filePath = strFilePath
' append just created input object to "inputs" collection
Set inputs(strInputName) = objInput
Set objInput = Nothing
'***********************************
' go to next input value
lngStartPos = InStr(lngStartPos, strByteToString, strIDInput)
' check if input separator is the last
If Mid(strByteToString, lngStartPos + Len(strIDInput) + 1, 1) = "-" Then lngStartPos = 0
Wend
bytArray = ""
UpLoad = bytecount
End Function