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.
7 svar · 334 visningar · startad av G8
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
%>
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.
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?
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...
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.
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.