Dear Sir,

I am trying to use do a upload function on my site. I got a upload class
from Internet. However, sometimes, it works, sometimes, it give me the
following error.
Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument

/viplogin/include/UploadClass.asp, line 136

Line 136 is following

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


Can someone help me out??



<my upload class>

<%
'***************************************
' File: Upload.asp
' Author: Jacob "Beezle" Gilley
' Email: avis7@airmail.net
' Date: 12/07/2000
' Comments: The code for the Upload, CByteString,
' CWideString subroutines was originally
' written by Philippe Collignon...or so
' he claims. Also, I am not responsible
' for any ill effects this script may
' cause and provide this script "AS IS".
' Enjoy!
'****************************************

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

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

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 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




--
Met vriendelijke groet,

Guoqi Zheng
Tel: +31 (0) 23 5343545
http://www.meetholland.com

Re: file upload problem by Evertjan

Evertjan
Sun Jan 04 12:22:58 CST 2004

Guoqi Zheng wrote on 04 jan 2004 in
microsoft.public.inetserver.asp.general:

> I am trying to use do a upload function on my site. I got a upload
> class from Internet. However, sometimes, it works, sometimes, it give
> me the following error.
> Microsoft VBScript runtime error '800a0005'
>
> Invalid procedure call or argument
>
> /viplogin/include/UploadClass.asp, line 136
>
> Line 136 is following
>

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))) --- Line 136
> Next
>
>
> Can someone help me out??
>

Hi Guoqi,

Ik kan me alleen bedenken dat er iets fout gaat met de SET in de regel
ervoor, waardoor de write niet lukt.

Bijvoorbeld een missende "/" tussen sPath & FileName ?

--
Evertjan.
The Netherlands.
(Please change the x'es to dots in my emailaddress)

Re: file upload problem by Guoqi

Guoqi
Sun Jan 04 12:45:00 CST 2004

Hi, Evertjan

Thanks for your quick reply. I have been in Holland for 3.5 years, however,
I still can not understand Dutch.

The variable "sPath" is always checked to make sure that it end with a "\".
So I think it wasn't that problem.

The funy thing is that somet imes it is ok, some times, it gives that error

Any one has an idea??

--
Met vriendelijke groet,

Guoqi Zheng
Tel: +31 (0) 23 5343545
http://www.meetholland.com
"Evertjan." <exjxw.hannivoort@interxnl.net> дÈëÏûÏ¢ÐÂÎÅ
:Xns9466C535A1D5eejj99@194.109.133.29...
> Guoqi Zheng wrote on 04 jan 2004 in
> microsoft.public.inetserver.asp.general:
>
> > I am trying to use do a upload function on my site. I got a upload
> > class from Internet. However, sometimes, it works, sometimes, it give
> > me the following error.
> > Microsoft VBScript runtime error '800a0005'
> >
> > Invalid procedure call or argument
> >
> > /viplogin/include/UploadClass.asp, line 136
> >
> > Line 136 is following
> >
>
> 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))) --- Line 136
> > Next
> >
> >
> > Can someone help me out??
> >
>
> Hi Guoqi,
>
> Ik kan me alleen bedenken dat er iets fout gaat met de SET in de regel
> ervoor, waardoor de write niet lukt.
>
> Bijvoorbeld een missende "/" tussen sPath & FileName ?
>
> --
> Evertjan.
> The Netherlands.
> (Please change the x'es to dots in my emailaddress)



Re: file upload problem by Aaron

Aaron
Sun Jan 04 12:51:49 CST 2004

It has cost you more debugging this problem alone than it would to buy a
component that just works.

--
Aaron Bertrand
SQL Server MVP
http://www.aspfaq.com/




"Guoqi Zheng" <no@sorry.com> wrote in message
news:#3ZRGgu0DHA.2676@tk2msftngp13.phx.gbl...
> Dear Sir,
>
> I am trying to use do a upload function on my site. I got a upload class
> from Internet. However, sometimes, it works, sometimes, it give me the
> following error.
> Microsoft VBScript runtime error '800a0005'
>
> Invalid procedure call or argument
>
> /viplogin/include/UploadClass.asp, line 136
>
> Line 136 is following
>
> For nIndex = 1 to LenB(FileData)
> oFile.Write Chr(AscB(MidB(FileData,nIndex,1))) --- Line 136
> Next
>
>
> Can someone help me out??
>
>
>
> <my upload class>
>
> <%
> '***************************************
> ' File: Upload.asp
> ' Author: Jacob "Beezle" Gilley
> ' Email: avis7@airmail.net
> ' Date: 12/07/2000
> ' Comments: The code for the Upload, CByteString,
> ' CWideString subroutines was originally
> ' written by Philippe Collignon...or so
> ' he claims. Also, I am not responsible
> ' for any ill effects this script may
> ' cause and provide this script "AS IS".
> ' Enjoy!
> '****************************************
>
> 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
>
> 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
>
> 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 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
>
>
>
>
> --
> Met vriendelijke groet,
>
> Guoqi Zheng
> Tel: +31 (0) 23 5343545
> http://www.meetholland.com
>
>