webForumDet fria alternativet

Varför funkar ej detta?

ASPur ASP

5 svar · 222 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Jag ska ladda upp en fil och spara info till en databas men i själva uploadningen så blir det fel!

Feltyp:
Request-objekt, ASP 0206 (0x80004005)
Det går inte att anropa BinaryRead efter att samlingen Request.Form har använts.

Så den kommer bara till där den anropar funktionen som laddar upp filen och den raden:
request_binaries = Request.BinaryRead(Request.TotalBytes)

Hoppas nån vet hur jag ska skriva!

If Request.QueryString("action") ="laggtill" Then%>
  <table border="0">
  <tr> 
    <td> 
            <b>Lägg till</b>
    </td>
  </tr>
  <tr> 
    <td> 
            <img src="bilder/dot2.gif">
    </td>
  </tr>
<form name="frmUpload" method="post" action="admin.asp?do=inne&action=upload" enctype="multipart/form-data">
    <tr> 
      <td><b>Namn:</b><br><input type="text" name="namn" size="45"></td>
    </tr>
  <tr>
    <td><b>Filen:</b><br><input type="file" name="fil" size="31"></td>
  </tr>
    <tr> 
      <td><b>Storlek:</b><br><input type="text" name="storlek" size="45"></td>
    </tr>
    <tr> 
      <td><b>Beskrivning:</b><br><textarea name="info" rows="10" cols="60"></textarea></td>
    </tr>
    <tr> 
      <td><input type="submit" name="Submit" value="Spara"></td>
    </tr>
</form>
  </table>
<p>
<%End If
If Request.QueryString("action") = "upload" Then

	UPLOAD_PATH	= Server.MapPath("filer")
	Set Fso	= Server.CreateObject("Scripting.FileSystemObject")
	Set Folder	= Fso.getFolder(UPLOAD_PATH)
        If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then

		Session("Namn")   = Request.Form("namn")
		Session("Storlek") = Request.Form("storlek")
		Session("Info")      = Request.Form("info")

		Set Upload	= get_upload_files()
		fcontent	= Upload("fil").Item("content")

                If Fso.FileExists(UPLOAD_PATH & "\" & extract_filename(Upload("fil").Item("filename"))) Then
		    Response.Redirect "admin.asp?do=inne&action=add&mess=exist"
                Else
                    Set File	= Fso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(Upload("fil").Item("filename")))
                End If                        
		For i = 1 to LenB(fcontent)
			File.Write chr(AscB(MidB(fcontent, i, 1)))
		Next
		File.Close: Set File	= Nothing

		Session("Fil")	             = extract_filename(Upload("fil").Item("filename"))
		Response.Redirect "admin.asp?do=inne&action=spara"
        End If

Function get_upload_files()
		Set upload_object= Server.CreateObject("Scripting.Dictionary")
		request_binaries	= Request.BinaryRead(Request.TotalBytes)
		position_start		  = 1
		position_end		  = InstrB(position_start, request_binaries, get_byte_string(chr(13)))
		boundary		    = MidB(request_binaries, position_start, (position_end - position_start))
		boundary_pos		= InstrB(1, request_binaries, boundary)
                
		Do Until (boundary_pos = InstrB(request_binaries, boundary & get_byte_string("--")))
			If Not(Response.IsClientConnected) Then Response.End

			position_start	= (InstrB(InstrB(boundary_pos, request_binaries, get_byte_string("Content-Disposition")), request_binaries, get_byte_string("name=")) + 6)
			position_end	= InstrB(position_start, request_binaries, get_byte_string(chr(34)))

			name			= get_string(MidB(request_binaries, position_start, (position_end - position_start)))
			pos_file		= InstrB(boundary_pos, request_binaries, get_byte_string("filename="))

			If  ((pos_file <> 0) AND (pos_file < InstrB(position_end, request_binaries, boundary))) Then
				upload_object.Add name, Server.CreateObject("Scripting.Dictionary")

				position_start	= (pos_file + 10)
				position_end	= InstrB(position_start, request_binaries, get_byte_string(chr(34)))
				upload_object.item(name).Add "filename", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

				position_start	= (InstrB(position_end, request_binaries, get_byte_string("Content-Type:")) + 14)
				position_end	= InstrB(position_start, request_binaries, get_byte_string(chr(13)))
				upload_object.item(name).Add "content-type", get_string(MidB(request_binaries, position_start, (position_end - position_start)))

				position_start	= (position_end + 4)
				position_end	= InstrB(position_start, request_binaries, boundary) - 2
				upload_object.item(name).Add "size", ((position_end - position_start))
				upload_object.item(name).Add "content", MidB(request_binaries, position_start, (position_end - position_start))
			End If
			boundary_pos	= InstrB(boundary_pos + LenB(boundary), request_binaries, boundary)
		Loop

		Set get_upload_files = upload_object
	End Function

	Function get_byte_string(str)
		For cnt = 1 to Len(str)
			get_byte_string	= get_byte_string & chrB(AscB(Mid(str, cnt, 1)))
		Next
	End Function

	Function get_string(str)
		For cnt = 1 to LenB(str)
			get_string	= get_string & chr(AscB(MidB(str, cnt, 1))) 
		Next
	End Function

	Function extract_filename(filename)
		extract_filename = Right(filename, Len(filename) - InStrRev(filename, "\", -1, 1))
	End Function

End If
solbulleMedlem sedan mars 20015 287 inlägg
AsaMedlem sedan dec. 20011 860 inlägg
#3

Tackar :)

AsaMedlem sedan dec. 20011 860 inlägg
#4

Fick inget bra svar nå!

	Session("Fil")	             = extract_filename(Upload("fil").Item("filename"))
            Session("namn")          = UploadRequest.Item("namn").Item("Value")
            Session("storlek")        = UploadRequest.Item("storlek").Item("Value")
            Session("info")              = UploadRequest.Item("info").Item("Value")

Ska det vara så?

solbulleMedlem sedan mars 20015 287 inlägg
#5

Det tror jag nog ska göra susen!

AsaMedlem sedan dec. 20011 860 inlägg
#6

Blev så här istället!

<%If Request.QueryString("action") ="laggtill" And Session("admin") = "inloggad" Then%>
<table width="450" align="center">
  <tr> 
    <td colspan="2"><b>Ladda upp en fil</b></td>
  </tr>
  <tr> 
    <td colspan="2"><img src="bilder/dot2.gif"></td>
  </tr>
<form name="frmUpload" method="post" action="admin.asp?do=inne&action=upload" enctype="multipart/form-data" onSubmit="return add()">
    <tr> 
      <td><b>Namn:</b></td><td><input type="text" name="namn" size="45"></td>
    </tr>
  <tr>
    <td><b>Filen:</b></td><td><input type="file" name="fil" size="31"></td>
  </tr>
    <tr> 
      <td colspan="2"><b>Beskrivning:</b><br><textarea name="info" rows="10" cols="60"></textarea></td>
    </tr>
    <tr> 
      <td colspan="2"><input type="submit" name="Submit" value="Ladda upp och spara"></td>
    </tr>
</form>
  </table>
<p>
<%End If
If Request.QueryString("action") ="laggtill2" And Session("admin") = "inloggad" Then%>
<table width="450" align="center">
  <tr> 
    <td colspan="2"><b>Lägg till uppgifter om en fil</b></td>
  </tr>
  <tr> 
    <td colspan="2"><img src="bilder/dot2.gif"></td>
  </tr>
<form name="spara" method="post" action="admin.asp?do=inne&action=sparar" onSubmit="return add2()">
    <tr> 
      <td><b>Namn:</b></td><td><input type="text" name="namn" size="40"></td>
    </tr>
    <tr> 
      <td><b>Sökväg till fil:</b></td><td><input type="text" name="file" size="40"></td>
    </tr>
  <tr>
    <td><b>Storlek i byte:</b></td><td><input type="text" name="storlek" size="30">  1000 byte = 1 kb</td>
  </tr>
    <tr> 
      <td colspan="2"><b>Beskrivning:</b><br><textarea name="info" rows="10" cols="60"></textarea></td>
    </tr>
    <tr> 
      <td colspan="2"><input type="submit" name="Submit" value="Spara uppgifter"></td>
    </tr>
</form>
  </table>
<p>
<%End If
If Request.QueryString("action") = "upload" And Session("admin") = "inloggad" Then

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

BuildUploadRequest RequestBin

contentType   = UploadRequest.Item("fil").Item("ContentType")
filepathname  = UploadRequest.Item("fil").Item("FileName")
filename         = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value              = UploadRequest.Item("fil").Item("Value")
file                  = "filer/" & filename
namn              = UploadRequest.Item("namn").Item("Value")
storlek            = byteCount
info                 = UploadRequest.Item("info").Item("Value")

Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("filer/"&filename))

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

MyFile.Close

Conn.Execute("Insert Into download(namn,Info,storlek,file) Values('"& namn &"','"& info &"'," & storlek &",'"& file &"')")
Response.Redirect "admin.asp?do=inne"

Sub BuildUploadRequest(RequestBin)
  PosBeg = 1
  PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
  boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
  boundaryPos = InstrB(1,RequestBin,boundary)
  Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
    Dim UploadControl
    Set UploadControl = CreateObject("Scripting.Dictionary")
    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)
    If PosFile<>0 AND (PosFile<PosBound) Then
        PosBeg = PosFile + 10
        PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
        FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
        UploadControl.Add "FileName", FileName
        Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
        PosBeg = Pos+14
        PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
        ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
        UploadControl.Add "ContentType",ContentType
        PosBeg = PosEnd+4
        PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
        Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
   Else
        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
  UploadControl.Add "Value" , Value
  UploadRequest.Add name, UploadControl
  BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
  Loop
End Sub

Function getByteString(StringStr)
  For i = 1 to Len(StringStr)
    char = Mid(StringStr,i,1)
    getByteString = getByteString & chrB(AscB(char))
  Next
End Function

Function getString(StringBin)
  getString =""
  For intCount = 1 to LenB(StringBin)
    getString = getString & chr(AscB(MidB(StringBin,intCount,1))) 
  Next
End Function

End If%>
128 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)