webForumDet fria alternativet

Overrides uploadscript och verify-sida?

7 svar · 334 visningar · startad av G8

G8Medlem sedan jan. 20011 213 inlägg
#1

Hej hopp,

sitter och pillar lite med OverRRides uploadscript och det funkar ju klockrent. Problemet är att det ska användas i ett formulär där man ska verifiera sina uppgifter innan de skrivs in i databasen och filen laddas upp.

Hur gör jag för att "cach:a" informationen om filen i en form input type hidden?

Formulär 1

<input type="file" name="thefile">

Formulär för att verifiera

Thefile = Request.Form("thefile")
<input name="thefile" type="hidden" value="<%=thefile%>">

ladda upp filen

<%
Response.Expires=0
Response.Buffer = TRUE
Response.Clear
byteCount = Request.TotalBytes

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

BuildUploadRequest RequestBin

contentType = UploadRequest.Item("thefile").Item("ContentType")
filepathname = UploadRequest.Item("thefile").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("thefile").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("d:\helpdeskattachements\"&filename)

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

MyFile.Close
%>

<%
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
%>
@ndersMedlem sedan juni 200032 969 inlägg
#2

Hur gör jag för att "cach:a" informationen om filen i en form input type hidden?

Det gör du inte. Du måste ladda upp filen först. Om den inte ska sparas så får du ta bort den efteråt.

G8Medlem sedan jan. 20011 213 inlägg
#3

Det går alltså inte att cacha informationen om filen till verifysidan och ladda uppden först när man har verifierat och går vidare för att skriva in i databasen?

@ndersMedlem sedan juni 200032 969 inlägg
#4

Nej.

Av säkerhetsskäl kan du inte säga åt webbläsaren att automatiskt ladda upp en fil till servern. Tacka gudarna för det...

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#5

Du kan lagra den på disk och i det nya formuläret ha en referens till bilden med t.ex. en guid. Sen när man verifierar så kopierar du filen dit du vill ha den och gör vad du ska göra...

Visst, man skulle kunna spotta ut alla data i filen i ett vanligt textfält, men det känns som dum lösning.

G8Medlem sedan jan. 20011 213 inlägg
#6

Jo, är ju iofs bra när man tänker efter lite...

Har du förslag på andra lösningar?

@ndersMedlem sedan juni 200032 969 inlägg
#7

Var det något fel på förslaget att ladda upp filen på en gång?
Efter verifieringen flyttar du filen till rätt ställe, sedan är det bara att ta bort alla orphans / fil-lik som ligger och skräpar med jämna mellanrum.

G8Medlem sedan jan. 20011 213 inlägg
#8

Nej, igentligen inte.

Tror vi tar och skippar själva verifieringen dock.

Tack för hjälpen dock

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)