webForumDet fria alternativet

Uploadscript utan komponent 2

93 svar · 6 683 visningar · startad av OveRRidE · sida 2 av 5

WickmarkMedlem sedan juli 2003172 inlägg
#21

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
#22

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
#23

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
#24

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
#25

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
#26
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
#27

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
#28
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
#29

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
#30

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
#31

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
#32

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
#33

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
#34

Va bra tack PatrikB ska testa.
/Ivar

PatrikBMedlem sedan mars 20002 713 inlägg
#35

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
#36

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
#37

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
#38

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
#39

Hur ser line 80 ut? och lite rader innan ....

cya,
/PatrikB

hellboyMedlem sedan aug. 200349 inlägg
#40

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
Genererad på 503 ms · cache AV · v20260730165559-full.f96bc7eb