Avatar billede zantiago Nybegynder
20. marts 2005 - 01:34 Der er 9 kommentarer og
1 løsning

Cannot use Request.Form

Hej Eksperter

Jeg får denne fejl:
"Cannot use Request.Form collection after calling BinaryRead."

Jeg har prøvet at skrive upload.form i stedet, virker heller ikke ;o(

Koden er:
-----------------------------------------------------------------------------------------------------------
<%
Dim oUpload
Dim oFile
Dim sFileName
Dim oFSO
Dim sPath
Dim sNewData
Dim nLength
Dim bytBinaryData
Dim folder


Const nForReading = 1
Const nForWriting = 2
Const nForAppending = 8

' grab the uploaded file data
Set oUpload = New clsUpload
Set oFile = oUpload("File1")

' parse the file name
sFileName = oFile.FileName
If Not InStr(sFileName, "\") = 0 Then
    sFileName = Mid(sFileName, InStrRev(sFileName, "\") + 1)
End If

' Convert the binary data to Ascii
bytBinaryData = oFile.BinaryData
nLength = LenB(bytBinaryData)
For nIndex = 1 To nLength
    sNewData = sNewData & Chr(AscB(MidB(bytBinaryData, nIndex, 1)))
Next

function get_new_name()
    MaxNum = 0
    Set fs = Server.CreateObject( "Scripting.FileSystemObject" )
    folder = server.mappath("../userfiles/"&lcase(Unique_Name)&"/pictures") & "\"
    Set myFolder = fs.GetFolder(folder)

    temp_file = 0
    for each thing in myfolder.files
        temp_file = left(thing.name,len(thing.name)-4)
        'response.write temp_file
        if int(temp_file) > int(maxnum) then
            MaxNum = temp_file
        end if
    next
   
    get_new_name = int(MaxNum) + 1
end function


sFileName = get_new_name&".jpg"

Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
oFSO.OpenTextFile(folder & sFileName, nForWriting, True).Write sNewData
Set oFSO = Nothing

Set oFile = Nothing
Set oUpload = Nothing

Response.write("Billedet er uploaded!!!")
%>
<%
Picture_Name = Request.form("Picture_Name")
'Opretter billede i databasen
Set rs_add_picture = Server.CreateObject("ADODB.RecordSet")
rs_add_picture.open "Select * From [Pictures]" , Conn,1,3
rs_add_picture.Addnew
rs_add_picture("Site_Id")    =    Site_Id
rs_add_picture("Picture_Name")    =    Picture_Name
rs_add_picture("Picture_Url")    =    sFileName
rs_add_picture.Update
%>
-----------------------------------------------------------------------------------------------------------

Håber I kan hjælpe mig :o)

// Morten
Avatar billede eagleeye Praktikant
20. marts 2005 - 09:22 #1
Dit upload object hedder oUpload så du bør kunne skriver:  oUpload.Form("navnet")
Avatar billede zantiago Nybegynder
20. marts 2005 - 11:57 #2
Hej igen

Jeg får denne fejl :o(

--------------------------------------------------------------------------------------
Microsoft VBScript runtime  error '800a01b6'

Object doesn't support this property or method: 'form'

/admin/pictures.asp, line 91
--------------------------------------------------------------------------------------
<%
Dim oUpload
Dim oFile
Dim sFileName
Dim oFSO
Dim sPath
Dim sNewData
Dim nLength
Dim bytBinaryData
Dim folder


Const nForReading = 1
Const nForWriting = 2
Const nForAppending = 8

' grab the uploaded file data
Set oUpload = New clsUpload
Set oFile = oUpload("File1")

' parse the file name
sFileName = oFile.FileName
If Not InStr(sFileName, "\") = 0 Then
    sFileName = Mid(sFileName, InStrRev(sFileName, "\") + 1)
End If

' Convert the binary data to Ascii
bytBinaryData = oFile.BinaryData
nLength = LenB(bytBinaryData)
For nIndex = 1 To nLength
    sNewData = sNewData & Chr(AscB(MidB(bytBinaryData, nIndex, 1)))
Next

function get_new_name()
    MaxNum = 0
    Set fs = Server.CreateObject( "Scripting.FileSystemObject" )
    folder = server.mappath("../userfiles/"&lcase(Unique_Name)&"/pictures") & "\"
    Set myFolder = fs.GetFolder(folder)

    temp_file = 0
    for each thing in myfolder.files
        temp_file = left(thing.name,len(thing.name)-4)
        'response.write temp_file
        if int(temp_file) > int(maxnum) then
            MaxNum = temp_file
        end if
    next
   
    get_new_name = int(MaxNum) + 1
end function


sFileName = get_new_name&".jpg"

Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
oFSO.OpenTextFile(folder & sFileName, nForWriting, True).Write sNewData
Set oFSO = Nothing

Response.write("Billedet er uploaded!!!")

Picture_Name = oUpload.form("Picture_Name")
'Opretter billede i databasen
Set rs_add_picture = Server.CreateObject("ADODB.RecordSet")
rs_add_picture.open "Select * From [Pictures]" , Conn,1,3
rs_add_picture.Addnew
rs_add_picture("Site_Id")        =    Site_Id
rs_add_picture("Picture_Name")    =    Picture_Name
rs_add_picture("Picture_Url")    =    sFileName
rs_add_picture.Update

Set oFile = Nothing
Set oUpload = Nothing
%>
Avatar billede eagleeye Praktikant
20. marts 2005 - 15:11 #3
Ok prøv at skrive det som:

xx = oUpload.Form.Item("navnet")
Avatar billede zantiago Nybegynder
20. marts 2005 - 16:54 #4
Nope - Denne fejl:
-----------------------------------------------
Billedet er uploaded!!!

Microsoft VBScript runtime error '800a01a8'

Object required

/admin/pictures.asp, line 93
-----------------------------------------------

<%
Dim oUpload
Dim oFile
Dim sFileName
Dim oFSO
Dim sPath
Dim sNewData
Dim nLength
Dim bytBinaryData
Dim folder


Const nForReading = 1
Const nForWriting = 2
Const nForAppending = 8

' grab the uploaded file data
Set oUpload = New clsUpload
Set oFile = oUpload("File1")

' parse the file name
sFileName = oFile.FileName
If Not InStr(sFileName, "\") = 0 Then
    sFileName = Mid(sFileName, InStrRev(sFileName, "\") + 1)
End If

' Convert the binary data to Ascii
bytBinaryData = oFile.BinaryData
nLength = LenB(bytBinaryData)
For nIndex = 1 To nLength
    sNewData = sNewData & Chr(AscB(MidB(bytBinaryData, nIndex, 1)))
Next

function get_new_name()
    MaxNum = 0
    Set fs = Server.CreateObject( "Scripting.FileSystemObject" )
    folder = server.mappath("../userfiles/"&lcase(Unique_Name)&"/pictures") & "\"
    Set myFolder = fs.GetFolder(folder)

    temp_file = 0
    for each thing in myfolder.files
        temp_file = left(thing.name,len(thing.name)-4)
        'response.write temp_file
        if int(temp_file) > int(maxnum) then
            MaxNum = temp_file
        end if
    next
   
    get_new_name = int(MaxNum) + 1
end function


sFileName = get_new_name&".jpg"

Set oFSO = Server.CreateObject("Scripting.FileSystemObject")
oFSO.OpenTextFile(folder & sFileName, nForWriting, True).Write sNewData
Set oFSO = Nothing


Response.write("Billedet er uploaded!!!")

Picture_Name = oUpload.Form.Item("Picture_Name")
'Opretter billede i databasen
Set rs_add_picture = Server.CreateObject("ADODB.RecordSet")
rs_add_picture.open "Select * From [Pictures]" , Conn,1,3
rs_add_picture.Addnew
rs_add_picture("Site_Id")        =    Site_Id
rs_add_picture("Picture_Name")    =    Picture_Name
rs_add_picture("Picture_Url")    =    sFileName
rs_add_picture.Update

Set oFile = Nothing
Set oUpload = Nothing
%>
Avatar billede zantiago Nybegynder
20. marts 2005 - 16:54 #5
Hov - Passer ikke...

Det er denne fejl:
Billedet er uploaded!!!

Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'Form'

/admin/pictures.asp, line 92
Avatar billede eagleeye Praktikant
20. marts 2005 - 17:17 #6
hvor har du fået clsUpload fra?
Er der ikke et eksempel med?

Jeg har fundet denne side med noget kode: http://blog.eightsquared.co.uk/DisplayMessages.asp?FolderID=20

Prøv at rette linjen til dette:

Picture_Name = oUpload.Fields("Picture_Name").Value
Avatar billede zantiago Nybegynder
20. marts 2005 - 17:40 #7
Jeg inkluderer denne fil:
<!--#include file="upload.class"-->

som indeholder:
<%
' ------------------------------------------------------------------------------
' Container of Field Properties
Class clsField
    Public FileName
    Public ContentType
    Public Value
    Public FieldName
    Public Length
    Public BinaryData
End Class
' ------------------------------------------------------------------------------
Class clsUpload
' ------------------------------------------------------------------------------
    Private nFieldCount
    Private oFields()
   
' ------------------------------------------------------------------------------
    Public Property Get Count()
        Count = nFieldCount
    End Property
' ------------------------------------------------------------------------------
    Public Default Property Get Field(ByRef asFieldName)
        Dim lnLength
        Dim lnIndex
       
        lnLength = UBound(oFields)
       
        If IsNumeric(asFieldName) Then
            If lnLength >= asFieldName And asFieldName > -1 Then
                Set Field = oFields(asFieldName)
            Else
                Set Field = New clsField
            End If
        Else
            For lnIndex = 0 To lnLength
                If LCase(oFields(lnIndex).FieldName) = LCase(asFieldName) Then
                    Set Field = oFields(lnIndex)
                    Exit Property
                End If
            Next
            Set Field = New clsField
        End If
    End Property
' ------------------------------------------------------------------------------
    Public Function Exists(ByRef avKeyIndex)
        Exists = Not IndexOf(avKeyIndex) = -1
    End Function
' ------------------------------------------------------------------------------
    Public Property Get ValueOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        ValueOf = oFields(lnIndex).Value
    End Property
' ------------------------------------------------------------------------------
    Public Property Get FileNameOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        FileNameOf = oFields(lnIndex).FileName
    End Property
' ------------------------------------------------------------------------------
    Public Property Get LengthOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        LengthOf = oFields(lnIndex).LengthOf
    End Property
' ------------------------------------------------------------------------------
    Public Property Get BinaryDataOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        BinaryDataOf = oFields(lnIndex).BinaryData
    End Property
' ------------------------------------------------------------------------------
    Private Function IndexOf(ByVal avKeyIndex)
        Dim lnIndex
        If IsNumeric(asFieldName) Then
            avKeyIndex = CLng(avKeyIndex)
            If nFieldCount > avKeyIndex And avKeyIndex > -1 Then
                IndexOf = avKeyIndex
            Else
                IndexOf = -1
            End If
        Else
            For lnIndex = 0 To nFieldCount - 1
                If LCase(oFields(lnIndex).FieldName) = LCase(avKeyIndex) Then
                    IndexOf = lnIndex
                    Exit Function
                End If
            Next
            IndexOf = -1
        End If
    End Function
' ------------------------------------------------------------------------------
    Public Property Get ContentTypeOf(ByRef avKeyIndex)
        Dim lnIndex
        lnIndex = IndexOf(avKeyIndex)
        if lnIndex = -1 Then Exit Property
        ContentTypeOf = oFields(lnIndex).ContentType
    End Property
' ------------------------------------------------------------------------------
    Private Sub Class_Terminate()
        For lnIndex = 0 To nFieldCount - 1
            Set oFields(0) = Nothing
        Next
    End Sub
' ------------------------------------------------------------------------------
    Private Sub Class_Initialize()
       
        Dim lnBytes                ' Bytes received from the client
        Dim lnByteCount            ' Number of bytes received
        Dim lnStartPosition        ' Position at which content begins
        Dim lnEndPosition        ' Position at which content ends
       
        Dim loDic                ' Contains properties of each
                                ' specific field
                                ' Local dictionary object(s)
                                ' to be appended to class-scope
                                ' dictioary object.
                               
        Dim lnBoundaryBytes        ' Bytes contained within the current boundary
        Dim lnBoundaryStart        ' Position at wich the current boundary begins
                                ' within the lnBytes binary data.
        Dim lnBoundaryEnd        ' Position at wich the current boundary ends
                                ' within the lnBytes binary data.
        Dim lnDispositionPosition
       
        Dim lsFieldName            ' Name of the current field being parsed from
                                ' Binary Data
        Dim lsFileName            ' Name of the file within the current boundary
        Dim lnFileNamePosition    ' Location of file name within current boundary
       
        ' Initialize Fields
        nFieldCount = 0
        ReDim oFields(-1)
       
        ' Read the bytes (binary data) into memory   
        lnByteCount = Request.TotalBytes
        lnBytes = Request.BinaryRead(lnByteCount)
       
        'Get the lnBoundaryBytes
        lnStartPosition = 1
        lnEndPosition = InstrB(lnStartPosition, lnBytes, CStrB(vbCr))
       
        lnBoundaryBytes = MidB(lnBytes, lnStartPosition, lnEndPosition - lnStartPosition)
       
        lnBoundaryStart = InstrB(1, lnBytes, lnBoundaryBytes)
       
       
        ' Loop until the BoundaryBytes begin with "--"
        Do Until (lnBoundaryStart = InstrB(lnBytes, lnBoundaryBytes & CStrB("--")))
       
            ' All data within this boundary is stored within a local dictionary
            ' to be appended to the class-scope dictionary.
           
            ReDim Preserve oFields(nFieldCount)
            nFieldCount = nFieldCount + 1
           
            Set loField = New clsField

            lnDispositionPosition = InstrB(lnBoundaryStart, lnBytes, CStrB("Content-Disposition"))
           
            ' Get an object name
            lnStartPosition = InstrB(lnDispositionPosition, lnBytes, CStrB("name=")) + 6
            lnEndPosition = InstrB(lnStartPosition, lnBytes, CStrB(""""))
            lsFieldName = CStrU(MidB(lnBytes, lnStartPosition, lnEndPosition - lnStartPosition))
            loField.FieldName = lsFieldName
           
            ' Get the location fo the file name.
            lnFileNamePosition = InstrB(lnBoundaryStart, lnBytes, CStrB("filename="))
            lnBoundaryEnd = InstrB(lnEndPosition, lnBytes, lnBoundaryBytes)
           
            'Test if object is a file
            If Not lnFileNamePosition = 0 And lnFileNamePosition < lnBoundaryEnd Then
           
                ' Parse Filename
                lnStartPosition = lnFileNamePosition + 10
                lnEndPosition =  InstrB(lnStartPosition, lnBytes, CStrB(""""))
                lsFileName = CStrU(MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition))
                loField.FileName = lsFileName               
               
                ' Parse Content-Type
                lnStartPosition = InstrB(lnEndPosition,lnBytes,CStrB("Content-Type:")) + 14
                lnEndPosition = InstrB(lnStartPosition,lnBytes,CStrB(vbCr))
                ContentType = CStrU(MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition))
                loField.ContentType = ContentType

                ' Parse Content
                lnStartPosition = lnEndPosition + 4
                lnEndPosition = InstrB(lnStartPosition,lnBytes,lnBoundaryBytes)-2
                Value = MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition)
                loField.BinaryData = Value & CStrB(vbNull)
                loField.Length = LenB(Value)
            Else

                ' Parse Content
                lnStartPosition = InstrB(lnDispositionPosition, lnBytes, CStrB(vbCr)) + 4
                lnEndPosition = InstrB(lnStartPosition, lnBytes, lnBoundaryBytes) - 2
                Value = CStrU(MidB(lnBytes,lnStartPosition,lnEndPosition-lnStartPosition))
                loField.Value = Value
                loField.Length = Len(Value)
            End If

            Set oFields(UBound(oFields)) = loField

            'Loop to next object
            lnBoundaryStart = InstrB(lnBoundaryStart + LenB(lnBoundaryBytes), lnBytes, lnBoundaryBytes)
           
            Set loField = Nothing
           
        Loop

    End Sub
' ------------------------------------------------------------------------------
    Private Function CStrU(ByRef psByteString)
        Dim lnLength
        Dim lnPosition
        lnLength = LenB(psByteString)
        For lnPosition = 1 To lnLength
            CStrU = CStrU & Chr(AscB(MidB(psByteString, lnPosition, 1)))
        Next
    End Function
' ------------------------------------------------------------------------------
    Private Function CStrB(ByRef psUnicodeString)
        Dim lnLength
        Dim lnPosition
        lnLength = Len(psUnicodeString)
        For lnPosition = 1 To lnLength
            CStrB = CStrB & ChrB(AscB(Mid(psUnicodeString, lnPosition, 1)))
        Next
    End Function
' ------------------------------------------------------------------------------
End Class
' ------------------------------------------------------------------------------
%>
Avatar billede zantiago Nybegynder
20. marts 2005 - 17:43 #8
Virker ikke - Men hvis jeg istedet skriver:
Picture_Name = oUpload("Picture_Name").Value

SÅ VIRKER DET !!!! :o)

Wuhuu - Point til dig...
Avatar billede eagleeye Praktikant
20. marts 2005 - 17:47 #9
ok så det var uden fields, her et svar :)
Avatar billede zantiago Nybegynder
20. marts 2005 - 17:49 #10
Ik for at spamme - men hvis du kan hjælpe her:
http://www.eksperten.dk/spm/601738

Så ville det være super fedt - giver gerne ekstra point... Det er lidt noget haste noget :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester