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.
<% 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
%>
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>
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.
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
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.
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.
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.
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. :)
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