webForumDet fria alternativet

Ladda upp FLERA filer

ASP

4 svar · 194 visningar · startad av kb00obfr

Medlem sedan nov. 200229 inlägg
Frågan#1

Har en kod som funkar utmärkt för att ladda upp enstaka filer med. Nu är det så att jag vill kunna ladda upp flera. Input komponenten av typen file verkar bara klara av en fil? (denna atlså: input type="file")

Vet att det finns massor av trådar om detta, men jag hittar inget där. Tacksam för svar!

Ifall någon vill ha, här är koden.

/Fredrik

<% Option Explicit %>
<% Response.Expires = 0 %>
<%
	Dim UPLOAD_PATH
		UPLOAD_PATH	= Server.MapPath("filer")

	Dim g_oFso, g_oFolder, g_oFile
		Set g_oFso	= Server.CreateObject("Scripting.FileSystemObject")
		Set g_oFolder	= g_oFso.getFolder(UPLOAD_PATH)

	If (Request.ServerVariables("REQUEST_METHOD") = "POST") Then
		Dim g_oUpload
			Set g_oUpload	= get_upload_files()

		Dim fpos, fcontent
			fcontent	= g_oUpload("upload").Item("content")
		Set g_oFile	= g_oFso.CreateTextFile(UPLOAD_PATH & "\" & extract_filename(g_oUpload("upload").Item("filename")))
		For fpos = 1 to LenB(fcontent)
			g_oFile.Write chr(AscB(MidB(fcontent, fpos, 1)))
		Next
		g_oFile.Close: Set g_oFile	= Nothing

		Response.Redirect Request.ServerVariables("SCRIPT_NAME")
	End If

	Response.Write "<html><body><table>"
	Response.Write "<link href=""style.css"" rel=""stylesheet"" type=""text/css"">"
	Response.Write "<font face=verdana size=2><div align=""center"">LADDA UPP FILER</div></font>"
	Response.Write "<tr><td><hr size=""1"" color=""#000000""></td></tr>"
	For Each g_oFile In g_oFolder.Files
		Response.Write "<tr><td><font face=verdana size=1><a href=""filer/" & g_oFile.Name & """>" & g_oFile.name & "</a></font></td></tr>"
	Next
	Response.Write "<tr><td><hr size=""1"" color=""#000000""></td></tr>"
	Response.Write "<tr><td align=""right""><form name=""frmUpload"" method=""post"" enctype=""multipart/form-data"" action=""" & Request.ServerVariables("SCRIPT_NAME") & """>"
	Response.Write "<input type=""file"" name=""upload"" style=""Border: 1px solid; font-family: verdana; font-size: 10px""> &nbsp; <input type=""submit"" value=""Ladda upp"" style=""border: #000000 1px solid; font-family: verdana; font-size: 10px""></td></tr>"
	Response.Write "</table></body></html>"

%>
<%
	Function get_upload_files()
		Dim	upload_object, request_binaries
		Dim position_start, position_end
		Dim boundary, boundary_pos

		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

			Dim name, pos_file

			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)
		Dim cnt
		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)
		Dim cnt
		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
%>
Medlem sedan dec. 20002 526 inlägg
#2

kan du inte gora en For Each loop??????

Medlem sedan nov. 200229 inlägg
#3

(vi kan ta det här :-)

Problemet är att jag inte vet var jag ska lägga loppen, om inte jag kan välja mer än en fil i taget kommer det ju ta år att ladda upp många filer... och det känns som det ligger i input file delen... eller?

Medlem sedan dec. 20002 526 inlägg
#4

men sag att du har 5 input file falt... sen lagger du For Each loopen dar sjalva uppladdningen sker, liksom vilka falt som innhellar nagot ska laddas upp.... detta ar ratt komplicerat som du vill gora.... men du kan forsoka.... testa ;)

Medlem sedan dec. 20002 526 inlägg
#5

emission svarade pa sant problem, har inte kollat riktigt vad hans kod sa.... men han borjade med "No problem" och sen ar det ju emission vi snackar om ;)
http://www.webforum.nu/showthread.php?s=&threadid=6531&highlight=ladda+AND+upp+AND+flera

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)