Jag använder komponenten SAFileUP för att tänka upp bilder till en sida.
Jag har kämpat som en gnu för att bestämma ett eget namn på filen så att den heter som jag vill.
Nu är det såhär att jag måste koda ihop något så att det går att ladda upp 10 sidor samtidigt och alla skall få ett unikt namn som slumpas fram.
Detta är koden jag använder för att tanka upp en bild.
set upl1 = Server.CreateObject("SoftArtisans.FileUp")
upl1.OverWriteFiles = false
FName = Mid(upl1.UserFilename, InstrRev(upl1.UserFilename, "\") + 1)
FExtension = MID(FName,instr(FName,".")+1)
FCONT = upl1.Form("f1").ContentType
upl1.Path = Server.MapPath("./bilder/")
user = session("user")
intUserID = session("ID")
strFile = FName
Akoll = Right((strFile), 3)
if Akoll = "gif" then
upl1.Form("f1").Save
elseif Akoll = "GIF" then
upl1.Form("f1").Save
elseif Akoll = "jpg" then
upl1.Form("f1").Save
elseif Akoll = "JPG" then
upl1.Form("f1").Save
elseif Akoll = "jpeg" then
upl1.Form("f1").Save
elseif Akoll = "JPEG" then
upl1.Form("f1").Save
elseif Akoll = "TIF" then
upl1.Form("f1").Save
elseif Akoll = "TIF" then
uupl1.Form("f1").Save
elseif Akoll = "png" then
upl1.Form("f1").Save
elseif Akoll = "PNG" then
upl1.Form("f1").Save
else
response.Redirect("index.asp")
end if
if (upl1.IsEmpty) then
Response.write "<p>Fel: Filen finns troligtvis inte!</p>"
response.Redirect("index.asp")
elseif (upl1.ContentDisposition <> "form-data") then
Response.write "<p>Fel: något blev fel!</p>"
response.Redirect("index.asp")
else
fil = "bilder\"&strFile
andelse = Right((strFile), 3)
randomize()
namn=Int((9999999999-1)*Rnd + 1)
slutnamn = ""&namn&"."&andelse&""
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fileObject = fso.GetFile(Server.MapPath(fil))
fileObject.Name = ""&namn&"."&andelse&""
strSQL ="INSERT INTO pics (strUser, intUserID, strFile) values ('" & user & "', " & intUserID & ", '" & slutnamn & "')"
Connect.Execute(strSQL)
end if
Loopa igenom elementen (ge dem namn som börjar med "file"), ta fram ett slumpnamn och spara
For Each item in upl1.Form
if instr(item,"file")=1 then
'Använd upl1.Form(item) precis som du använt upl1.Form("f1")
end if
Next
Ett par kommentarer på ditt kodexempel:
1.
Akoll = Right((strFile), 3)
if Akoll = "gif" then
upl1.Form("f1").Save
elseif Akoll = "GIF" then
upl1.Form("f1").Save
elseif Akoll = "jpg" then
upl1.Form("f1").Save
elseif Akoll = "JPG" then
upl1.Form("f1").Save
elseif Akoll = "jpeg" then
upl1.Form("f1").Save
elseif Akoll = "JPEG" then
upl1.Form("f1").Save
elseif Akoll = "TIF" then
upl1.Form("f1").Save
elseif Akoll = "TIF" then
uupl1.Form("f1").Save
elseif Akoll = "png" then
upl1.Form("f1").Save
elseif Akoll = "PNG" then
upl1.Form("f1").Save
else
response.Redirect("index.asp")
end if
...är onödigt långt och kommer inte att fungera för t.ex. "JPEG". Prova något sånt här i stället..
Akoll = lcase(fso.GetExtensionName(strFile))
if Akoll = "gif" or Akoll="jpg" or Akoll="jpeg" or Akoll="tif" or Akoll="png" then
upl1.Form("f1").Save
else
response.Redirect("index.asp")
end if
2.
Response.write "<p>Fel: Filen finns troligtvis inte!</p>"
response.Redirect("index.asp")
Antingen gör man Response.write eller så Redirectar man. Inte både och. Det går inte.
3.
andelse = Right((strFile), 3)
Man kan sällan utgå från att en filändelse är 3 tecken.
'kalla alla file-element för något som börjar på "file", så kan vi identifiera dem enkelt i koden
'Loopa igenom alla formulärelement
For Each item in upl1.Form
'Kolla om namnet börjar på "file"
if instr(item,"file")=1 then
'Använd upl1.Form(item) precis som du använt upl1.Form("f1") i ditt eget exempel
end if
Next
if Akoll = "gif" then
upl1.Form(item).Save
elseif Akoll = "jpg" then
upl1.Form(item).Save
elseif Akoll = "tif" then
upl1.Form(item).Save
elseif Akoll = "png" then
upl1.Form(item).Save
elseif Akoll = "bmp" then
upl1.Form(item).Save
else
response.Redirect("http://www.aftonbladet.se")
end if
Använder detta för att bestämma vilka bilder man ska kunna ladda upp..
Den fungerar inte klokt..
Vilken fil ja än tankar upp kommer ja till aftonbladet..
Jag har skrivit ut Akoll och där står det gif, testar mest i de formatet.
Jag har testat med koden från emission men det blir samma fel.
Istället för att sticka iväg till Aftonbladet, kanske det är vettigt att skriva ut ett felmeddelande följt av värdet på Akoll - så du kan se om felet ligger tidigare i din kod (vilket det förmodligen gör).
Om du inte använder Option Explicit, så prova det. Kanske innebär det att du hittar ett stavfel på ett variabelnamn som ställer till det för dig...
Nu har jag börjar kikat ordentligt på koden igen men jag hittar inget fel.
Akoll = lcase(right(strFile,3))
if Akoll = "gif" then
upl1.Form(item).Save
else
response.Write("Fel, formatet var "& Akoll &"")
end if
Nu testar jag enbart formatet gif som ni ser..
Jag gjorde en bild i PS som garanterat är en gif.
Jag har testa att skriva ut Akoll när jag tankar upp och det står "gif".
När jag laddat upp bilden så står det kommer felmeddelandet upp, dock inte något i Akoll.
Det roliga är att bilden laddas upp och får et nytt namn, precis som det skall vara.