WickmarkMedlem sedan juli 2003172 inlägg
PatrikB skrev:
Wickmark skrev:
Hur gör jag om jag vill bli skickad till
default.asp?c=grey&hp=admin2&act=2&admin=S_ADD
efter uppladdningen?
Har försökt att lägga det efter include virtual, men utan resultat.
Använder den senaste uppladdningsskriptet (2 filer på samma gång)
MVH
Wickmark
Du får köra en
Response.Redirect("default.asp?c=grey&hp=admin2&act=2&admin=S_ADD")
efter det du vill att den ska skicka tillbaka.
cya,
/PatrikB
Jao, det vet jag, men inte riktigt var jag skulle placera det!
Jag placerade det här:
If err.Number <> 0 Then
Response.Write("<p>ERROR: Couldn´t save the file: " & sFilePath & "</p><p>" & err.Number & "<br>" & err.Message & "</p>")
err.Clear
elseif err.Number = 0 Then
Response.Redirect("default.asp?c=grey&hp=admin2&act=2&admin=S_ADD")
end if
End If
funkar perfekt :e
Tack för ditt svar!
/wickmark
solbulleMedlem sedan mars 20014 998 inlägg
PatrikB: Whoop! Platt fall!
Du har så rätt, som om jag egentligen någonsin tvivlat...
Då säger jag så här, (måste ha sista ordet :) ) , efter denna upplysning förstår jag, och säkert fler med mig, annars tror jag nog att flera av oss här på forumet inte är tillräckligt familjära med classer och dess egenskaper samt fördelar för att se till att placera och hantera dessa som de skall.
En hjälpfil, även på svenska, skulle nog vara en höjdare till ert skript, tänker på hur mycket trubbel det varit med den tidigare varianten av hr Collignon/OveRRidEs skript trots att mycket varit bra förklart i själva skriptet.
Nu har i alla fall jag lärt mig lite till.
PatrikBMedlem sedan mars 20002 713 inlägg
Wickmark skrev:
Jag placerade det här:
If err.Number <> 0 Then
Response.Write("<p>ERROR: Couldn´t save the file: " & sFilePath & "</p><p>" & err.Number & "<br>" & err.Message & "</p>")
err.Clear
elseif err.Number = 0 Then
Response.Redirect("default.asp?c=grey&hp=admin2&act=2&admin=S_ADD")
end if
End If
funkar perfekt :e
Tack för ditt svar!
/wickmark
Fast, då har du placerat den på felställe.
Tanken med class-filer är att de INTE ska vara bundna till en specifik applikation utan vara så generella som möjligt för att flera applikationer ska kunna använda sig av samma class.
Det du nu gjorde var att "bygga ihop" klassen till att fungera på ett ställe. Hur gör du när du ska behöva använda denna klass på ett annat ställe? ska du då ha ytterligare en kopia?
Det jag menade var att det skulle se ut typ så här:
<%
Option Explicit
Dim objUpload
Dim strName
dim objFile
Dim objFile2
Set objUpload = New overrUpload
strName = objUpload.Form("txtName")
Response.Write("Textfield txtName = " & strName)
Set objFile = objUpload.Form("theFile")
If objFile.IsFile Then
Call objFile.SaveToFile(Server.MapPath("/upload/" & objFile.Filename), True)
End If
Set objFile = Nothing
Set objFile2 = objUpload.Form("anotherFile")
If objFile2.IsFile Then
Call objFile2.SaveToFile(Server.MapPath("/upload/" & objFile2.Filename), True)
End If
set objFile2 = Nothing
Set objUpload = Nothing
[b]'## -- nu har all kod exekverats och du kan skicka användaren till en annan sida --
Response.Redirect("default.asp?c=grey&hp=admin2&act=2&admin=S_ADD")[/b]
%>
<!--#INCLUDE VIRTUAL="/classes/clsupload.asp"-->
Fast jag ser VARFÖR du vill ha det så .... hmmm, får göra lite fler uppdateringar till scriptet och bygga in så man kan kontrollera om några fel har uppstått för att kunna få möjligheten att skicka vidare till annan sida.
cya,
/PatrikB
PatrikBMedlem sedan mars 20002 713 inlägg
Solbolle ... cashiing!
Hoppas nu bara fler får upp ögonen och ser fördelarna. Finns ju även lite nackdelar som mer overhead.
cya,
/PatrikB ... som oxå vill ha sista ordet ;)
PatrikBMedlem sedan mars 20002 713 inlägg
Gjort en ny uppdatering av Upload-klassen för de som vill ha bättre felhantering över de fel som kan uppstå.
cya,
/PatrikB
IvarMedlem sedan aug. 2002229 inlägg
PatrikB
Jag märkte att om man inte laddar file2 (anotherFile) då får man fel meddelande.
Microsoft VBScript runtime (0x800A01A8)
Object required: ''
/up/upload/upload.asp, line 68
Hur ska jag fixa det? Det är inte alltid man väljer att ladda två filer.
Här är all kod:
<%
Option Explicit
Dim objUpload
Dim strName
dim objFile
Dim objFile2
Dim varyErrors
Dim iErr
Dim blnErr
Dim connect
Dim sql
blnErr = False
Set objUpload = New overrUpload
strName = objUpload.Form("txtName")
'Response.Write("Textfield txtName = " & strName)
'## -- get the first file for upload --
Set objFile = objUpload.Form("theFile")
'## -- check if we have a file --
If objFile.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile.SaveToFile(Server.MapPath("bilder/" & objFile.Filename), True)
'## -- check if any errors occured --
If objFile.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
End If
End If
'## -- get second file for upload --
Set objFile2 = objUpload.Form("anotherFile")
'## -- check if we have a file --
If objFile2.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile2.SaveToFile(Server.MapPath("bilder/" & objFile2.Filename), True)
set connect = server.createobject("ADODB.connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/annonser.mdb") & ";pwd=;"
SQL= "INSERT INTO items (item,fileName,filename1) VALUES('" & strName & "','" & objFile.Filename & "','" & objFile2.Filename & "')"
'On Error Resume Next
'## -- check if any errors occured --
If objFile2.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile2.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
End If
End If
[red]connect.Execute(SQL) 'Rad 68[/red]
connect.close
Set connect= Nothing
Set objFile = Nothing
Set objFile2 = Nothing
Set objUpload = Nothing
'## -- check if we have any errors. If no errors redirect user to default page --
If blnErr = False Then
Server.Transfer "index.asp"
End if
%>
<!--#INCLUDE VIRTUAL="up/classes/clsupload.asp"-->
Rad 68 markerad med R.Färg
/ Ivar
PatrikBMedlem sedan mars 20002 713 inlägg
Nu ser jag, det har ju inte med upload-scriptet att göra utan hur du initierar och exekverar ditt connection-object.
Jag förespråkar att om man skapar ett connection-object i en if-sats är det också I den if-satsen som exekveringen ska ske.
Se till att flytta in den exekveringen i if-satsen
'## -- check if we have a file --
If objFile2.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile2.SaveToFile(Server.MapPath("bilder/" & objFile2.Filename), True)
'On Error Resume Next
'## -- check if any errors occured --
If objFile2.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile2.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
Else
'## -- no errors. insert data into database --
Set connect = server.createobject("ADODB.connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/annonser.mdb") & ";pwd=;"
SQL= "INSERT INTO items (item,fileName,filename1) VALUES('" & strName & "','" & objFile.Filename & "','" & objFile2.Filename & "')"
connect.Execute(SQL) 'Rad 68
connect.close
Set connect= Nothing
End If
End If
cya,
/PatrikB
IvarMedlem sedan aug. 2002229 inlägg
Tack PatrikB nu funkar som det ska.
Skickar hela koden om det är någon som behöver lösningen på upload med att spara uppladdade filer i mapp och sökvägen i databasen.
<%
Option Explicit
Dim objUpload
Dim strName
dim objFile
Dim objFile2
Dim varyErrors
Dim iErr
Dim blnErr
Dim connect
Dim sql
blnErr = False
Set objUpload = New overrUpload
strName = objUpload.Form("txtName")
'Response.Write("Textfield txtName = " & strName)
'## -- get the first file for upload --
Set objFile = objUpload.Form("theFile")
'## -- check if we have a file --
If objFile.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile.SaveToFile(Server.MapPath("bilder/" & objFile.Filename), True)
'## -- check if any errors occured --
If objFile.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
Else
set connect = server.createobject("ADODB.connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/annonser.mdb") & ";pwd=;"
SQL= "INSERT INTO items (item,fileName) VALUES('" & strName & "','" & objFile.Filename & "')"
connect.Execute(SQL)
End If
End If
'## -- get second file for upload --
Set objFile2 = objUpload.Form("anotherFile")
'## -- check if we have a file --
If objFile2.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile2.SaveToFile(Server.MapPath("bilder/" & objFile2.Filename), True)
'On Error Resume Next
'## -- check if any errors occured --
If objFile2.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile2.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
Else
set connect = server.createobject("ADODB.connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../db/annonser.mdb") & ";pwd=;"
SQL= "INSERT INTO items (item,fileName,filename1) VALUES('" & strName & "','" & objFile.Filename & "','" & objFile2.Filename & "')"
connect.Execute(SQL)
connect.close
End If
End If
Set connect= Nothing
Set objFile = Nothing
Set objFile2 = Nothing
Set objUpload = Nothing
'## -- check if we have any errors. If no errors redirect user to default page --
If blnErr = False Then
Server.Transfer "index.asp"
End if
%>
<!--#INCLUDE VIRTUAL="up/classes/clsupload.asp"-->
Tack till alla inblandade
/ Ivar
CalevanMedlem sedan maj 20031 133 inlägg
Som det är nu, så är det ju två fält man ska fylla i för att ladda upp något, går inte inte att ha en lista eller dylikt, så att man kan markera tex 10 filer sammtidigt och ladda upp? Jag menar altså att när man trycker på browse så ska det komma fram ett fönster där man kan välja mer än en fil och så laddar man upp alla på en gång. det får gärna gå att välja en hel katalog. Finns det någon möjlighet att göra något sådant?
Vad gör igentligen fältet "Some Field:"? varför finns det?
edit: la till en fråga till
PatrikBMedlem sedan mars 20002 713 inlägg
Den funktionen, att kunna markera flera filer samtidigt har inte med detta script att göra utan mer om hur fält-typen field "uppför" sig.
Some field: är bara ett exempel på att man kan ha andra typer av fält, dvs inte bara fält för att ladda upp filer.
cya,
/PatrikB
IvarMedlem sedan aug. 2002229 inlägg
ladda upp 3 filer samtidigt
Hej PatrikB!
Jag skulle vill också kunna ladda upp i alla fall 3 filer samtidigt är detta möjligt och i så fall hur?
PatrikBMedlem sedan mars 20002 713 inlägg
Jepp, det är möjligt
bara att lägga till fler fält för filuppladdning.
Sedan, på sidan som tar emot, så är det bara att öka på så det står ngt liknande detta:
'## -- get the first file for upload --
Set objFile = objUpload.Form("theFile")
'## -- check if we have a file --
If objFile.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile.SaveToFile(Server.MapPath("bilder/" & objFile.Filename), True)
'## -- check if any errors occured --
If objFile.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
Else
'## -- gör vad du ska när det inte blir fel --
End If
End If
'## -- get the second file for upload --
Set objFile2 = objUpload.Form("theFile2")
'## -- check if we have a file --
If objFile2.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile2.SaveToFile(Server.MapPath("bilder/" & objFile.Filename), True)
'## -- check if any errors occured --
If objFile2.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile2.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
Else
'## -- gör vad du ska när det inte blir fel --
End If
End If
'## -- get the n file for upload --
Set objFile<n> = objUpload.Form("theFile<n>")
'## -- check if we have a file --
If objFile<n>.IsFile Then
'## -- file exists. proceed saving file. --
Call objFile<n>.SaveToFile(Server.MapPath("bilder/" & objFile.Filename), True)
'## -- check if any errors occured --
If objFile<n>.HasErrors Then
blnErr = True
'## -- HUSTON! we got errors. proceed --
'## -- get all error messages --
varyErrors = objFile<n>.GetErrors()
'## -- loop through all errors --
For iErr = 0 TO UBound(varyErrors)
'## -- print out error --
Response.Write(varyErrors(iErr) & "<hr>")
Next
Else
'## -- gör vad du ska när det inte blir fel --
End If
End If
naturligvis får du byta ut <n> mot något annat lämpligt. Detta visar bara att det går att lägga till "hur många du vill".
Det som kan hända är att själva uploaden timar ut då aspscript endast processas i max 90 sekunder default. Det kan man ändra genom att lägga till Server.ScriptTimeout = antalsekunderduvill
cya,
/PatrikB
CalevanMedlem sedan maj 20031 133 inlägg
PatrikB skrev:
Den funktionen, att kunna markera flera filer samtidigt har inte med detta script att göra utan mer om hur fält-typen field "uppför" sig.
okey, jag tittade igenom lite och såg att tex:
INPUT TYPE="checkbox" gav en checkbox
INPUT TYPE="submit" en submit knapp
INPUT TYPE="file" ett uppladdningsfönster för EN fil
men jag hittade ingen formulärtyp som jag mig möjlighet att välja flera filer samtidigt i ett browse fönster. Är du säker på att det finns?
IvarMedlem sedan aug. 2002229 inlägg
Va bra tack PatrikB ska testa.
/Ivar
PatrikBMedlem sedan mars 20002 713 inlägg
Calevan skrev:
PatrikB skrev:
Den funktionen, att kunna markera flera filer samtidigt har inte med detta script att göra utan mer om hur fält-typen field "uppför" sig.
okey, jag tittade igenom lite och såg att tex:
INPUT TYPE="checkbox" gav en checkbox
INPUT TYPE="submit" en submit knapp
INPUT TYPE="file" ett uppladdningsfönster för EN fil
men jag hittade ingen formulärtyp som jag mig möjlighet att välja flera filer samtidigt i ett browse fönster. Är du säker på att det finns?
Det var det jag sa. Du kan INTE markera flera filer samtidigt i ett INPUT TYPE="file" utan du får lägga till flera olika INPUT TYPE="file" för att kunna ladda upp flera filer samtidigt.
cya,
/PatrikB
CalevanMedlem sedan maj 20031 133 inlägg
PatrikB skrev:
Det var det jag sa. Du kan INTE markera flera filer samtidigt i ett INPUT TYPE="file" utan du får lägga till flera olika INPUT TYPE="file" för att kunna ladda upp flera filer samtidigt.
jo, jag noterade att INPUT TYPE="file" inte klarar det, men eftersom det går att markera fler filer i tex olika windowsprogram, så borde det ju gå med en annan typ av fält, men det går altså inte? och jag misstänker att man inte kan ladda upp en hel katalog då heller?
PatrikBMedlem sedan mars 20002 713 inlägg
du misstänker helt rätt.
En webbsida skiljer sig en hel del från en win-klient
cya,
/PatrikB
hellboyMedlem sedan aug. 200349 inlägg
hej hej...
detta script är precis ett sånt jag letat efter länge, eftersom i stort sett alla servrar kör med olika komponenter installerade.
Har dock stött på lite problem.. för följande felmeddelande när jag försöker köra det på min egen dator (win xp, IIS 5.0):
Körningsfel i Microsoft VBScript (0x800A0009)
Felaktigt matrisindex: 'i'
clsUpload.asp, line 80
har inte ändrat nånting i den filen, utan bara i upload.asp...
PatrikBMedlem sedan mars 20002 713 inlägg
Hur ser line 80 ut? och lite rader innan ....
cya,
/PatrikB
hellboyMedlem sedan aug. 200349 inlägg
rad 79 - 93
For i = 0 TO m_uploadData.Count - 1
If (LCase(vKeys(i)) = sItem) Then Exit For
Next
If (vItems(i)(m_constIsFile)) Then
Set objID = New FileData
With objID
.IsFile = vItems(i)(m_constIsFile)
.Value = vItems(i)(m_constValue)
.Filename = vItems(i)(m_constFilename)
.ContentType = vItems(i)(m_constContentType)
If (Len("" & .Filename) = 0) Then .IsFile = False
End With
Set Form = objID
Set objID = Nothing
Else