webForumDet fria alternativet

Request.Form och BinaryRead

4 svar · 173 visningar · startad av Andiee

AndieeMedlem sedan mars 2000177 inlägg
#1

Jag har gjort ett försök och använda en kodsnutt som någon gjort för att lägga upp bilder utan komponent och en annan kodsnutt som jag själv gjort:

<%
' Author Philippe Collignon
' Email PhCollignon@email.com

Response.Expires = 0
Response.Buffer = TRUE
Response.Clear
'Response.BinaryWrite(Request.BinaryRead(Request.TotalBytes))
byteCount = Request.TotalBytes
'Response.BinaryWrite(Request.BinaryRead(varByteCount))

RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest RequestBin

'email = UploadRequest.Item("email").Item("Value")

contentType = UploadRequest.Item("bild").Item("ContentType")
filepathname = UploadRequest.Item("bild").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("bild").Item("Value")

'Create FileSytemObject Component
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

'Create and Write to a File
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
' Set MyFile = ScriptObject.CreateTextFile(Left(Server.mappath(Request.ServerVariables("PATH_INFO")),pathEnd)&filename)
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("../bilder/"&filename))

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next

MyFile.Close
%>

<%
' Author Philippe Collignon
' Email PhCollignon@email.com
Sub BuildUploadRequest(RequestBin)
'Get the boundary
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
'Get all data inside the boundaries
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
'Members variable of objects are put in a dictionary object
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
'Test if object is of file type
If PosFile<>0 AND (PosFile<PosBound) Then
'Get Filename, content-type and content of file
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
'Add filename to dictionary object
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
'Add content-type to dictionary object
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
'Get content of object
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
'Get content of object
Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If
'Add content to dictionary object
UploadControl.Add "Value" , Value 
'Add dictionary object to main dictionary
UploadRequest.Add name, UploadControl 
'Loop to next object
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop

End Sub

'String to byte string conversion
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function

'Byte string to string conversion
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1))) 
Next
End Function
%>
<%

Film = Request.Form("film")

Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databasen.mdb") & ";"

SQL = "SELECT * FROM recensioner"
Conn.Execute(SQL)

SQL = "INSERT INTO recensioner(fld_film) VALUES('"&film&"')"
Conn.Execute(SQL)

Conn.Close
Set Conn = Nothing

Response.Redirect("recension.asp")

%>

Det funkar bra och bilden kommer upp men när den ska lägga till text i databsen kommer ett fel upp.

Nu har texten med felet framför mig men det står något om Request-samlingen kan inte användas med BinaryRead... Och hur ska jag då lösa detta?

------------------
~~~~~~~~~~~~~~~~~~~~
Mvh, Andreas
zizo@hem.utfors.se

hwsoderlundMedlem sedan feb. 200133 inlägg
#2

Det innebär att du inte kan komma åt några formulärobjekt förutom själva filen. Det är samma sak när man använder filuppladdningskomponenter.
Dessa komponenter brukar dock alltid ha en egen metod som kan användas för att komma åt de övriga delarna i formuläret.
Tyvärr har jag aldrig testat filuppladdning utan komponenter, så jag kan inte hjälpa dig.
Om du har möjlighet att använda komponenter så kan jag rekommendera den som finns på www.dundas.com . Den är gratis och funkar mycket bra.

AndieeMedlem sedan mars 2000177 inlägg
#3

Nej, jag har ingen tillgång till en komponent vad jag vet. De svarar inte på min fråga...

Ingen som vet?

------------------
~~~~~~~~~~~~~~~~~~~~
Mvh, Andreas
zizo@hem.utfors.se

hakangusMedlem sedan feb. 200144 inlägg
#4

För att komma åt text-fälten i ditt föregående formulär måsta du byta ut Film = Request.Form("film") och hänvisa till det genom följande:

Film=UploadRequest.Item("film").Item("Value")

Prova och se. :)

AndieeMedlem sedan mars 2000177 inlägg
#5

Jag ska prova...

------------------
~~~~~~~~~~~~~~~~~~~~
Mvh, Andreas
zizo@hem.utfors.se

129 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
126 ms — hämta tråd, inlägg och bilagor (db)