webForumDet fria alternativet

uploadrequest, fungerar inte som det skall?

ASP

8 svar · 655 visningar · startad av fakenick!

Medlem sedan juli 2002202 inlägg
Frågan#1

vill få detta att fungera:

från (sida1.asp):

<form method="post" action="sida2.asp" enctype="multipart/form-data">
<input type="hidden" value="tjena" name="hihi>

till (genom submit, sida2.asp):

Set UploadRequest = CreateObject("Scripting.Dictionary")
*hihi = UploadRequest.Item("hihi").Item("Value")

* där får jag detta fel:

Microsoft VBScript runtime error '800a01a8'
Object required: 'UploadRequest.Item(...)'

har sökt mycket efter detta.. och den enda förklaringen till detta
fel är att det inte finns något värde i uploadrequest:en.. men jag
vet att ett värde finns....

jag använder nämligen samma formulär till ett bilduppladdningsscript..
man skulle ju kunna slänga in all bildscriptskod för att slutligen få den
att fungera, men verkar inte så smart enligt mig.... :)

tacksam för svar! :)

Medlem sedan juni 200032 967 inlägg
#2

Hmm...

Om du använder multipart/form-data som enctype får du nog använda dig av uppladdningsscriptets metoder för att få ut formulärsdatan. Det ser ut som att det är något sådant du försöker dig på, men Scripting.Dictionary fungerar inte rakt av såsom du vill. Hur ser det ut när du använder dig av uppladdningsscriptet?

... eller så ser du till att inte sätta enctype i <form> om du ändå inte ska ladda upp någon fil?

Medlem sedan juli 2002202 inlägg
#3

såhär har jag gjort...

jag har två inputs, en av typen "checkbox" och en av typen "file"..
när man klickar i checkboxen enabla:s typen "file" och man kan då
välja fil etc...
i och med klicket switchar man action på <form>..

alltså:

ikryssad = bild+info.asp
icke kryssad = info.asp

och det är på icke kryssad mitt problem ligger,
att jag inte kan plocka ut värdena ur inputs:en...

jag har även testat med att lägga till switch mellan
enctype i mitt nuvarande javascript:

function laddauppellerej()
{if(document.form.checkbox.checked)
{document.form.pic.disabled=false;document.form.action='bild+info.asp';document.form.enctype='multipart/form-data';}
else {document.form.pic.disabled=true;document.form.action='info.asp';document.form.enctype='';}}

men tror inte att javascriptet skriver ut enctypen rätt,
eftersom filen för uppladdning reagerar med att få fel så
pass snabbt..

så här ser iallafall uppladdningskoden ut:

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

Response.Expires=0
Response.Buffer = TRUE
Response.Clear
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin
username = UploadRequest.Item("username").Item("Value")
[B]asdf = UploadRequest.Item("asdf").Item("Value")[/B]
contentType = UploadRequest.Item("pic").Item("ContentType")
filepathname = UploadRequest.Item("pic").Item("FileName")
filename = lcase(tralala & "_" & tralalal & "_" & Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\")))
value = UploadRequest.Item("pic").Item("Value")
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("/pics/" & filename))
For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next
MyFile.Close

det är alltså inget fel på koden, utan vill ha
funktionerna där man plockar ut värdena i inputs!

mvh john norrby..

Medlem sedan juni 200032 967 inlägg
#4

Varför byter du action på formuläret?
Menar du alltså att exakt den kod du visar fungerar bra när du laddar upp en fil?
Har du inte tillgång till någon "riktig" uploadkomponent exempelvis ASPUpload eller ASPSmartUpload?

Medlem sedan juli 2002202 inlägg
#5

så här hade jag förut:

när jag skulle byta informationen för en bild så var jag tvungen att välja
samma bild igen ifall jag ville ha kvar bilden, annars skulle den försvinna..

nu vill jag fixa det så här (och fixade det nyss):

jag har två val:

att lägga till både bild + information..

eller

redigera endast information

jag bytte action eftersom jag ibland vill ladda upp bild + information...
....men ibland BARA informationen..

.....

jag fixade det på så sätt att jag lade till en "inputupptagare" på
input type="file" name="picture" i bilduppladdningsscriptet..

körde en if-sats där man lade till uppgifterna i databasen..

if picture = "" then
else
rs("picture") = pic
end if

och sen lade jag till "on error resume next" längst upp i samma fil...

tack så mycket för dina svar som ändå ledde mig på rätt väg.. :)

men vad är fördelen med aspupload eller aspsmartupload om man jämför
med detta komponentlösa script? jag tycker detta fungerar nästintill klockrent. :)

Medlem sedan juni 200032 967 inlägg
#6

Fördelen med att använda t.ex. ASPSmartUpload är bl.a:
*) att koden blir kort och översiktlig. Jag, till exempel, fattar noll av den kladdiga koden du postat.
*) Det finns färdiga metoder för att bestämma tillåtna filtyper, maxstorlek etc.

och sen lade jag till "on error resume next" längst upp i samma fil...

Låter livsfarligt...

Medlem sedan juli 2002202 inlägg
#7

:D

mjo.. :)
men den fungerar som jag vill nu iallafall... :P

jag tror inte att webbservern jag använder
har den komponenten.. det är ju webbservern
som måste ha den? eller? :)

jag har iallafall lagt till if satser med filtyper och
storlek, så det fungerar rätt bra det också.. :)

passar på att tacka dig för alla andra miljarder
problem du löst för mig... :) you are a hero adde! ;)

Medlem sedan juli 2002202 inlägg
#8

smajleyberoende? NEEEJDÅ

Medlem sedan juni 200032 967 inlägg
#9

fakenick! skrev:

jag tror inte att webbservern jag använder
har den komponenten.. det är ju webbservern
som måste ha den? eller? :)

Jao!

jag har iallafall lagt till if satser med filtyper och
storlek, så det fungerar rätt bra det också.. :)

Topp! :)

passar på att tacka dig för alla andra miljarder
problem du löst för mig... :) you are a hero adde! ;)

Hmm, ja Adde kanske är ett smeknamn för mig. :D

Vassego! :bire

271 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)