"M@rk" <unknown@vosborg.invalid> skrev i en meddelelse
news:B95UPkwhge5Yg+cKxSDbsNbg9Trk@4ax.com...
> Hej alle,
>
> Problemet er imidlertid, at når jeg prøver at lave en sql-update i samme
> asp-fil som uploader billedet, så får jeg en fejl der siger, at jeg ikke
> må lave request.form efter binaryread ......... og så er jeg gået kold
>
>
> Hvordan i alverden skal jeg så få fortalt min persondatabase, at der nu
> ligger et billede af personen?
>
Hej Mark
Jeg forstår heller ikke helt hvorfor man ikke må request'e på form,
querystring m.fl. efter at man har lavet en Request.BinaryRead.
Men sådan er det
Men du kan alligevel få fat i det data som er postet
Den metode jeg kender er dog lidt tricky, og hvis der er nogen som har et
alternativ vil jeg meget gerne høre det.
Du tager en request.binaryread på request.totalbytes, så har du det der
blevet postet som binær data.
Dim a,b
a=Request.TotalBytes
b=Request.BinaryRead(a)
Herefter konvertere du det binære data til en string på følgende måde.
Dim strRequest
strRequest = binary2str(b)
Function binary2str(Binary)
Dim I, S
For I = 1 To LenB(Binary)
S = S & Chr(AscB(MidB(Binary, I, 1)))
Next
binary2str = s
End Function
Så har du det der blevet postet i variablen strRequest. Det er det samme som
hvis du normalt skriver request.form.
Variablen strRequest splitter du ved hvert &-tegn for at få adskilt
parameterne.
Dim arrRequest
arrRequest = split(strRequest, "&")
Du kan så lave en løkke og løbe array'et igennem. Her skal du så splitte på
=-tegnet, så du får parameterets navn og værdi.
Dim Field, FieldName, FieldContents
For Each Field In arrRequest
Field = split(Field, "=")
FieldName = Field(0)
FieldContents = Field(1)
response.write "<p>"&FieldName&" = "&FieldContents&"</p>"
next
Du skal så være opmærksom på at du får værdierne URL-encoded.
Der findes ikke i ASP en URLdecode funktion, men du kan lave din egen på
følgende måde:
Function URLDecode(What)
Pos = InStr(1, What, "%")
Do While Pos>0
What = Left(What, Pos-1) + _
Chr(Clng("&H" & Mid(What, Pos+1, 2))) + _
Mid(What, Pos+3)
Pos = InStr(Pos+1, What, "%")
Loop
URLDecode = What
End function
NB. Denne metode er lidt langsom. Som alternativ kan du benytte JSscripts
unescape funktion eller bruge ADODB.Stream.
Det vil sige at du bare skal køre URLDecode på FieldName og FieldContent
således.
FieldName = URLDecode(Field(0))
FieldContents = URLDecode(Field(1))
Hvis du så skal finde et bestemt parameter (filnavnet), så skal du lave en
løkke der løber dit array igennem og lede efter det.
Jeg håber at du kan bruge det
Hintzmann