webForumDet fria alternativet

Hitta variabelnamn i denna kod ?

ASP

14 svar · 403 visningar · startad av Pellefant

Medlem sedan maj 20023 372 inlägg
Frågan#1

Hej!

Tanken är att få in filens namn i "filenamne" på rad 31 nedan(merkerad med *****), Så att det skickas med i länken ett par rader under.men det går inte så bra, har testat allt jag kan komma på själv nu.

Detta script är från https://www.aspsidan.nu

Tack på förhand.

<% Option Explicit %>
<% Response.Expires	= 0 %>

<!-- Detta ASP-script är skrivet av Joakim på JoakimWeb.com -->
<!--#include file="koppling.asp" -->

<%Response.Buffer = True %>

<%
' Uppladdningskoden
If Request("do") = "laddaupp" Then

' Startar en funktion som finns längre ner i koden
Dim fil
Set fil = get_upload_files()

' Koden som laddar upp filen med hjälp av funktionen
Dim plac, filen, innehall
innehall = fil("upload").Item("content")

Set filen = filer.CreateTextFile(mapp2 & "\" & extract_filename(fil("upload").Item("filename")))
For plac = 1 to LenB(innehall)
filen.Write chr(AscB(MidB(innehall, plac, 1)))
Next

END IF

set filename = fil.Item("filename")       <- rad 31  *****
Set filen = Nothing

filen.Close 

%>

<A HREF="default.asp?fname=<%=filename%>">Continue</A>

<%
' funktionen som används för uppladdning av filer
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("--")))

' Om du stäng ner webbläsaren, då avslutas uppladdningen
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 mars 20002 836 inlägg
#2

Ditt fil object skapas ju endast om if-satsen ovanför inträffar.
<redigerat>

extract_filename(fil("upload").Item("filename"))

är det som plockar ut filnamnet i if-satsen. spara det till en variabel så kan du återanvända filnamnet vart du vill OM if-satsen uppfylls.
</redigerat>

cya,
PatrikB

Medlem sedan maj 20023 372 inlägg
#3

Tack Patrik, det hade jag aldrig kommit på själv. Fungerar jättebra. :)

Jag har testat ca 20 olika saker själv innan och typ 2 timmar tog det, alla med något irriterande felmeddelande.

Medlem sedan maj 20023 372 inlägg
#4

Någon som även förstår sig på var man kan peta in denna kod: Upload.OverwriteFiles = False

(Det innebär att finns redan en fil med samma namn, så lägger den till en siffra på titeln, tex filnamn(1) )

Källa: http://www.aspupload.com/manual_simple.html
(I mitten på sidan ungefär)

Medlem sedan mars 20015 287 inlägg
#5

Hm, men du använder dig väl inte av den komponenten du hänvisar till? Eller? (aspupload)

Medlem sedan maj 20023 372 inlägg
#6

Aha, det förklarar i så fall varför det inte fungerar. Servern stödjer något som kallas "ASP Smart Upload", jag ser nu i länken att den handlar om "ASP Upload", så det kan nog skilja sig åt. Tack för iaktagelsen.

Törs man fråga om någon istället förstår hur man lägger till "now" till filnamnet? (för att på så sätt skilja dem åt)

jag har försökt med:

upload = upload & now(), samt now, längst upp, men det gick inte.

Medlem sedan mars 20015 287 inlägg
#7

Kan inte heller se att du använder något vid namn upload i din kod...
Antar att det är denna rad som bestämmer filnamnet.

set filename = fil.Item("filename")

Då kanske du kan köra:

set filename = fil.Item("filename") & now()

Annars kan du som sagt använda en funktion o kolla om filen redan finns, typ något likt denna:

Function Filnamn(file)

		Set fso=Server.CreateObject("Scripting.FileSystemObject")
		Filnamn= file
		filenumber = 1

			Do While fso.FileExists(Server.mapPath(file))
				file = filenumber & Filnamn
				filenumber = filenumber + 1
			Loop
		
		Filnamn= file
		Set fso=Nothing
End Function
Medlem sedan mars 20015 287 inlägg
#8

Borde kunna anropas med:

set filename = Filnamn(fil.Item("filename"))
Medlem sedan maj 20023 372 inlägg
#9

Tack, för alla hjälp.

Känner att jag rört ihop begreppen, ASPULOAD, ASPSMARTUPLOAD, etc, samt vilka funktioner som hör till vad, ska läsa på lite i ämnet innan jag fortsätter med filuppladdningar.

Medlem sedan juni 200032 967 inlägg
#10

Nu har jag inte läst hela tråden, och detta kanske kommer helt ur sammanhang, men jag chansar. ;)

- - -

Det känns galet att använda SET för att tilldela en variabel ett strängvärde (för det är väl det filename är?)

SET skall användas för objekt.

- - -

Vad gäller ASPUpload / ASPSmartUpload / Uploadscriptet i ditt första inlägg, det är bara olika sätt att nå samma mål. Något som funkar i det ena funkar antagligen inte i det andra, men det brukar finnas alternativ.

ASPSmartUpload är en riktigt hygglig komponent, och lätt att använda. Läs in dig på hur den fungerar på https://www.aspsmart.com , och du kommer märka att den är betydligt lättare att använda än det stora och omständiga script som du visar här.

Mvh,

Medlem sedan maj 20023 372 inlägg
#11

Ja, det stämmer.

Detta är på den första sidan:

<form name="frmUpload" method="post" enctype="multipart/form-data" action="laddaupp.asp?do=laddaupp">
<input type='file' name='upload' >&nbsp;<input type='submit' value='Upload the file' >
</form>
Medlem sedan juni 200032 967 inlägg
#12

Jag är osäker på om du kan hämta filnamnet direkt från formuläret. ASPSmartUpload har properties och metoder för det mesta, så ta och hämta det därifrån istället.

Mvh,

Medlem sedan maj 20023 372 inlägg
#13

Tjena Anders! :)

Scriptet fungerar alltså. :)

Det enda jag vill ändra är så att det läggs til "now()" på filnamet så att det inte blir överskrivningar med nya filer över gamla.

Ska försöka lösa det genom att redan på första sida(formen) lägga till now(), det måste ju vara det enklaste ändå, så slipper man rota i ASP koden. Återkomer med lösningen sedan. :)

Medlem sedan juni 200032 967 inlägg
#14

Jag tror säkert att scriptet fungerar, men jag tror ändå att det är betydligt smidigare att använda ASPSmartUpload.

Jag har själv en uppladdningsfunktion som gör precis det du är ute efter, och det är generellt trevligt att arbeta med ASPSmartUpload.

Medlem sedan maj 20023 372 inlägg
#15

Aha, jag som trodde att jag höll på med ASPSMARTUPLOAD pga att mitt script fungerade. *s* Men så kom jag på det script som finns här på siten, där man kan ladda upp filer utan att servern stödjer detta.

Jag håller på att läsa på om just ASPSMARTUPLOAd i deras faq nu, känner jag jag är helt bortdribblad i detta, så jag återkommer när jag läst på och testat lite mer kod. Förhoppningsvis skriver jag att jag fått ordning på det. :)

280 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
155 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)