Ladda upp filer via asp # 2 Spara på olika sätt
Förord
Många har mailat mig och frågat hur man gör om man skall spara olika filtyper i olika kataloger, samt hanteringen runt just sparandet eller namnsättningen av själva filen. Detta exempel visar en variant där filen har olika filextensions, såsom .gif, .doc eller .zip - för detta tänkte jag att du har tre kataloger beroende på vad det är för typ av fil. I detta fall är det rätt klart att gif är bild, doc är ett worddokument och zip kan i detta fall vara vad som helst. Detta är ett komplement till huvudartikeln "Ladda upp filer utan att använda komponenter".Innehåll
Relaterade artiklar
» Ladda upp filer via asp utan komponentHär förutsätter vi att man bara kan skicka en fil åt gången och filnamnet hämtas upp med funktionen myRequestFiles.
Spara filen med ett namn som vi bestämmer
Det kan också vara så att du vill att varje fil skall ha ett nummer eller en speciell beteckning. Som här på PelleSoft så sparas era bilder, era tips och filer med det id som motsvarar artikelns id. För att göra så måste du alltså spara en huvudpost och i från detta tar vi reda på vad det är för värde som skall användas.
Om vi tänker oss att vi precis har sparat en huvudpost innehållande lite mer information om filen såsom vad den innehåller, en klassificering samt kanske ett användarnamn. I retur har vi fått reda på att posten fick id-nyckeln x och den kommer vi att använda för att spara filen. Vi måste dock ta reda på vilken filextension den har, för det är inte säkert det är gif, det kan lika gärna vara jpg eller något annat.
Det finns olika sätt att ta reda på vad en post fick för id när den adderades, antingen har du en lagrad procedur som returnerar det id efter att inserten utförts med @@identity funktionen. Ett annat sätt du kan använda under förutsättning att du har några mikrosekunder på dig innan någon annan försöker addera posten, nämligen skriva en select-fråga såsom nedanstående exempel
Om nu användaren exempelvis hade skickat upp en exempelfil som hette exempel.zip, vi sparade informationen i tabellen och den fick ett id som var 48, så kommer filen att få namnet 00048.zip
Bara tillåta vissa filer:
Ibland kan det vara så att du endast vill att en viss filtyp skall få skickas upp, är det exempelvis en .exe eller .vbp fil så vill du inte ta emot den. Då kan du redan i början på programkoden kontrollera detta. Eftersom du loopar igenom alla knappar, listor och textrutor - kan du redan där avgöra vad det är för filextension och på så sätt stoppa användaren.
Hur du gör det enklast är givetvis så fort du fått tag i filnamnet:
Samtidigt spara i databasen:
Om du väljer att samtidigt spara någon information i en tabell, så kanske du har några ytterligare fält såsom avsändare, email och innehåll. Exemplet förutsätter att det finns en connectionsträng i Application("DSN"), samt att du har i ditt formulär skapat tre textboxar och döpt dom till username, email samt comment. Placera denna koden Efter att du sparat filen.
Nu kan du experimentera fram på hur du vill att ditt program skall fungera, vad som skall tillåtas, hur och var det skall sparas så det är bara att prova på. Lycka till.
Avslutningsvis
För att jag skall veta om kursen är bra eller om den måste skrivas om så rösta gärna här uppe till höger. Skicka gärna ett iMail om du vill kommentera något som är felaktigt eller du tycker borde förtydligas.
/Pelle Johansson
' hämtar filnamnet vi skall spara
filename = myRequestFiles(0, 1)
Select Case lcase(right(filename, 4))
case ".gif"
SavePath = "c:\inetpub\wwwroot\upload\gif\" & filename
case ".doc"
SavePath = "c:\inetpub\wwwroot\upload\doc\" & filename
case ".zip"
SavePath = "c:\inetpub\wwwroot\upload\zip\" & filename
End Select
' skapar objektet för att kunna spara en fil, finns den så skriver vi över den
Set SaveFile = lf.CreateTextFile(SavePath, True)
' Skriver filen (arrayen) till disk
SaveFile.Write(filename)
' stänger och frigör objektet
SaveFile.Close
Spara filen med ett namn som vi bestämmer
Det kan också vara så att du vill att varje fil skall ha ett nummer eller en speciell beteckning. Som här på PelleSoft så sparas era bilder, era tips och filer med det id som motsvarar artikelns id. För att göra så måste du alltså spara en huvudpost och i från detta tar vi reda på vad det är för värde som skall användas.
Om vi tänker oss att vi precis har sparat en huvudpost innehållande lite mer information om filen såsom vad den innehåller, en klassificering samt kanske ett användarnamn. I retur har vi fått reda på att posten fick id-nyckeln x och den kommer vi att använda för att spara filen. Vi måste dock ta reda på vilken filextension den har, för det är inte säkert det är gif, det kan lika gärna vara jpg eller något annat.
Det finns olika sätt att ta reda på vad en post fick för id när den adderades, antingen har du en lagrad procedur som returnerar det id efter att inserten utförts med @@identity funktionen. Ett annat sätt du kan använda under förutsättning att du har några mikrosekunder på dig innan någon annan försöker addera posten, nämligen skriva en select-fråga såsom nedanstående exempel
set rst=con.execute("select max(id) as recordid from tabell")
returnedId = rst("recordid")
rst.close
' hämtar filnamnet på sedvanligt sätt
filename = myRequestFiles(0,1)
' hämtar filextension
extension = right(filename,4)
' bygger det nya filnamnet. Eftersom det exempelvis kan stå 48, så vill vi istället
' att det skall stå 00048 och det kan man göra på följande sätt:
filename = Right("00000" & trim(returnedId), 5)
' bygger ihop det nya filnamnet
newfilename = filename & extension
Om nu användaren exempelvis hade skickat upp en exempelfil som hette exempel.zip, vi sparade informationen i tabellen och den fick ett id som var 48, så kommer filen att få namnet 00048.zip
Bara tillåta vissa filer:
Ibland kan det vara så att du endast vill att en viss filtyp skall få skickas upp, är det exempelvis en .exe eller .vbp fil så vill du inte ta emot den. Då kan du redan i början på programkoden kontrollera detta. Eftersom du loopar igenom alla knappar, listor och textrutor - kan du redan där avgöra vad det är för filextension och på så sätt stoppa användaren.
Hur du gör det enklast är givetvis så fort du fått tag i filnamnet:
allowlist = ".gif,.jpg,.zip,.arj,.lha,.doc,.txt"
if instr(allowlist, extension) then
' ok, den är med i listan
else
Response.Write "Du får inte skicka upp filen med det filformatet
"
Response.Write "Endast " & allowlist & " är godkända."
Response.End
end if
Samtidigt spara i databasen:
Om du väljer att samtidigt spara någon information i en tabell, så kanske du har några ytterligare fält såsom avsändare, email och innehåll. Exemplet förutsätter att det finns en connectionsträng i Application("DSN"), samt att du har i ditt formulär skapat tre textboxar och döpt dom till username, email samt comment. Placera denna koden Efter att du sparat filen.
' eftersom request.form inte fungerar får du använda:
' myRequest("fältnamn")
set con=server.createobject("ADODB.Connection")
Con.Open Application("DSN")
SQL = "Insert into tabell (filename, user, email, comments) values(" & _
"'" & myRequestFiles(0,1) & "', " & _
"'" & myRequest("username") & "', " & _
"'" & myRequest("email") & "', " & _
"'" & myRequest("comments") & "', " & _
Con.Execute sql
Set Con = Nothing
Nu kan du experimentera fram på hur du vill att ditt program skall fungera, vad som skall tillåtas, hur och var det skall sparas så det är bara att prova på. Lycka till.
Avslutningsvis
För att jag skall veta om kursen är bra eller om den måste skrivas om så rösta gärna här uppe till höger. Skicka gärna ett iMail om du vill kommentera något som är felaktigt eller du tycker borde förtydligas.
/Pelle Johansson
0 Kommentarer