webForumDet fria alternativet

AspUpload + Odefinerat Fel

ASP

13 svar · 497 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tja!
Innan nån börjar gnälla om att jag ska söka, vill jag bara säga att jag ägnat de senaste två timmarna åt att gå igenom de ca. hundra trådarna om det här.

Dock funkar ingen av lösningarna för min del.
Använder ett Uploadscript:

<form action="index.asp?page=oUpload&amp;do=upl_item&amp;<%=PID%>" method="post" enctype="multipart/form-data" onsubmit="return ShowProgress();" name="uplForm">
	<table cellpadding="0" cellspacing="0" style="width: 500px;">
	<tr>
	<td class="text"><u>Anl. Nummer</u></td>
	<td class="text"><u>Anl. Adress</u></td>
	</tr>
	<tr>
	<td class="text" style="padding-top: 3px;"><%=gAnl(uId)%><input type="hidden" name="uId" value="<%=uId%>"></td>
	<td class="text" style="padding-top: 3px;"><%=gAddr(uId)%></td>
	</tr>
	<tr>
	<td colspan="2" class="text" style="padding-top: 10px;">Välj en fil för Uppladdning: <font style="font-size: 7pt; color: #B1AFAF;">(.pfd, .doc, .xls, .txt, .jpg, .zip)</font></td>
	</tr>
	<tr>
	<td colspan="2" class="text" style="padding-top: 5px;"><input type="file" name="uFile" class="frm_allow" style="width: 300px;"></td>
	</tr>
	<tr>
	<td colspan="2" class="text" style="padding-top: 5px;"><input type="submit" value="Ladda Upp" class="btn"></td>
	</tr>
	</table>
	</form>

[b].................................................................................[/b]

	Set Upload = Server.CreateObject("Persits.Upload")
	Upload.IgnoreNoPost = True
	Upload.ProgressID = Request.QueryString("PID")

'	Response.Write()
'	Response.End
	Upload.Save("E:\Projekt\SakAss\Uploaded")

	For Each File in Upload.Files
		oldName = File.Filename

		FilNamn = getChar(10)
		File.SaveAs(Server.Mappath("uploaded") & "\" & FilNamn & File.Ext)

		strSQL ="INSERT INTO tbl_upload (oId, fName, fPath, fSize) VALUES ('" &_
					Upload.Form("uId") & "', '" & File.FileName & "', '" & File.Path & "', " & File.Size & ")"
		Set oRec = oConn.Execute(strSQL)

		Response.Write(File.Filename & " med storlek " & Round(Int(File.Size / 1024), 2) & " laddades upp i " & File.Path)
	Next

Jag har:
- Asp Upload installerat.
- Starta om IIS otaliga gånger.
- Provat att ominstallera Asp Upload.
- Rätt behörighet på mappen.
- Inga Request.Form objekt i koden.
- Mappen existrerar
- Hårddisken är en Fysisk enhet.

Hur jag än bär mig åt, hur mkt jag än bantar scripet så får jag samma fel på samma rad, nämligen Odefinerat Fel på raden Upload.Save("E:\Projekt\SakAss\Uploaded").

Det sjukaste av allt är att samma script (har plockat det direkt) på en annan sida, som ligger i samma mapp (E:\Projekt\) och som funkar klockrent.

I den här mappen verkar script inte funka alls, medtanke på att jag suttit med det här och felsökt och letat hjälp sen kl 16.00.

Vad kan tänkas vara fel?

Medlem sedan mars 2001148 inlägg
#2

Igår var första gången jag använde aspUpload. Har fungerat oerhört smidigt, förutom när det strulade lite med rättigheter till mappen. Min gissning är att det fortfarande inte är helt rätt rättigheter, men det hjälper dig kanske dåligt om du gjort allt du kan på den fronten...

Medlem sedan feb. 20034 441 inlägg
#3

Det här scriptet anävnder jag nu i E:\Projek\Sakass, exakt samma script som jag använder i E:\Superbike, där scriptet funkar hur bra som helst.

Har kollat delning och säkerhet på mappen och den ärver rättigheterna från 'modermappen' (E:\Projekt', som är min Webroot).

Ser gärna fler tips och förslag!

Medlem sedan feb. 20034 441 inlägg
#4

Nu har jag provat att lägga upp sidan och får fortf. samma fel.
Det här känns ju som det är en bugg i komponenten, eftersom det funkar på en sida, men inte på en annan, trots samma kod.

Får Undefined Error hos Loopia med :/

Inga tips?
Det borde ju inte vara så att jag är den första i världen som stöter på det här.

Medlem sedan feb. 20034 441 inlägg
#5

Har sökt lite nu och får fram följande:

In most cases it means that your upload script uses Request.Form or Request.QueryString prior to calling Upload.Save . As a result, the BinaryRead method of the Request object fails. 
You must never use Request.Form in your upload script because the ENCTYPE="multipart/form-data" attribute of your form makes this collection unusable. Use Upload.Form instead. Remeber, however, that the Upload.Form collection is populated by a call to Upload.Save, therefore you can only use Upload.Form after a successful call to Upload.Save.

Källa: http://support.persits.com/show.asp?code=PS02022586

Som ni ser i min kod ovan försöker jag inte ta fram ett formulärsvärde m.h.a Request.Form någonstans i min kod, så det här ser tillsynes ut som ett problem helt utan lösning...?

Medlem sedan juni 200032 967 inlägg
#6

Hur ser koden ut nu? Och hur ser "exakt samma" kod på den fungerande sidan i samma mapp ut?

Medlem sedan feb. 20034 441 inlägg
#7

Ok, då kör vi, koden som funkar, ligger i E:\Projekt\Superbike:

Set Upload = Server.CreateObject("Persits.Upload")
Upload.ProgressID = Request.QueryString("PID")
Set Jpeg1 = Server.CreateObject("Persits.Jpeg")
Set Jpeg2 = Server.CreateObject("Persits.Jpeg")
Set Logo = Server.CreateObject("Persits.Jpeg")

Upload.Save Server.MapPath("uploaded\")

For Each File in Upload.Files
	If File.ImageType <> "JPG" Then
		Response.Write "Ingen giltig JPG-Bild."
		File.Delete
		Response.End
	End If

	oldName = File.Filename
	
'// Här slumpar vi fram ett ID för varje besök.
		'// Finns redan ID't i databasen, ja, då skapar vi ett nytt.	
		sOk = False
		'// Initerar en Loop som ska börja om ifall det framslumpade ID't redan finns i databasen.
		Do Until sOk = True
			'// getChar kallar på den funktion som finns i filen 'funcs.asp', det är här som ett ID slumpas fram.
			FilNamn = getChar(10)
			'// Här kontrolleras att ID't inte finns i databasen sedan tidigare.
			Set oRec = oConn.Execute("SELECT strName FROM tbl_pics WHERE strName = '" & FilNamn & "'")
			'// Finns ID't, då blir sOk falskt igen och proceduren börjar om. 
			If Not oRec.EOF Then
				sOk = False
			Else
				
				sOk = True
			End If
		'// Loopen påbörjaspå nytt.
		Loop

		File.SaveAs(Server.Mappath("uploaded") & "\" & FilNamn & File.Ext)

	Jpeg1.Open Server.Mappath("uploaded\" & FilNamn & File.Ext)
	Jpeg2.Open Server.Mappath("uploaded") & "\" & FilNamn & File.Ext

	LogoPath = Server.MapPath("pics") & "\copyright.gif"
	Logo.Open LogoPath

	Select Case Upload.Form("strScal")
		Case 3
			intX = 1024
			intY = 768
		Case 2
			intX = 800
			intY = 600
		Case 1
			intX = 640
			intY = 480
	End Select

	If Jpeg1.OriginalWidth > Jpeg1.OriginalHeight Then
		Jpeg1.Width = intX
		Jpeg1.Height = intY
	Else
		Jpeg1.Width = intY
		Jpeg1.Height = intX
	End If

	If Jpeg2.Width > Jpeg2.Height Then
		Jpeg2.Width = 114
		Jpeg2.Height = 86
	Else
		strX1 = Jpeg2.OriginalWidth / 2
		strY1 = Jpeg2.OriginalHeight / 2
		strX2 = strX1 + 114
		strY2 = strY1 + 86 
		Jpeg2.Crop strX1, strY1, strX2, strY2
	End If
	
	placeX = Jpeg1.Width - 360
	placeY = Jpeg1.Height - 20
	
'	Logo.Canvas.Pen.Color = &H000000 ' Blue
'	Logo.Canvas.Pen.Width = 1
'	Logo.Canvas.Brush.Solid = False ' to avoid solid bar
'	Logo.Canvas.DrawBar 1, 1, Logo.Width, Logo.Height

	Jpeg1.DrawImage placeX, placeY, Logo, , &HFF00FF 
	
	' Draw text
'	Jpeg1.Canvas.Font.Color = &HFF0000 ' Red
'	Jpeg1.Canvas.Font.Family = "Courier New"
'	Jpeg1.Canvas.Font.Bold = True
'	Jpeg1.Canvas.Font.Quality = 4 ' Antialiased
'	Jpeg1.Canvas.Font.BkMode = "Opaque" ' to make antialiasing work
'	Jpeg1.Canvas.Print 10, 572, "Copyright (c) XYZ, Inc."

	Jpeg1.Save Server.MapPath("uploaded/pics") & "\" &  File.FileName
	Jpeg2.Save Server.MapPath("uploaded/thumbs") & "\tmb_" & File.FileName

	strSQL = "INSERT INTO tbl_pics (strCat, strName, strDate, strSize, strType, strPath, strWidth, strHeight) VALUES ('" &_
											Upload.Form("subCat") & "', '" & File.FileName & "', #" & Now() & "#, " & File.Size & ", '" & Mid(File.Ext, 2) & "', '" &_
											File.Path & "', " & Jpeg1.Width & ", " & Jpeg1.Height & ")"

	Set oRec = oConn.Execute(strSQL)
	
	File.Delete
	Set FSO = CreateObject("Scripting.FileSystemObject")
	If FSO.FileExists(Server.Mappath("uploaded\" & oldName)) Then
		FSO.DeleteFile(Server.MapPath("uploaded\" & oldName))
	End If
Next

Den innehåller lite mer lull-lull, för att den endast behandlar bilder.

Koden som jag använder på den andra sidan, som inte funkar, ligger i E:\Projekt\SakAss och ser ut såhär:

	Set Upload = Server.CreateObject("Persits.Upload")
'	Upload.IgnoreNoPost = True
'	Upload.ProgressID = Request.QueryString("PID")

'	Response.Write()
'	Response.End
	Upload.Save(Server.MapPath("uploaded\"))

	For Each File in Upload.Files
		oldName = File.Filename

		FilNamn = getChar(10)
		File.SaveAs(Server.Mappath("uploaded") & "\" & FilNamn & File.Ext)

		strSQL =	"INSERT INTO tbl_upload (oId, fName, fPath, fSize) VALUES ('" &_
						Upload.Form("uId") & "', '" & File.FileName & "', '" & File.Path & "', " & File.Size & ")"
		Set oRec = oConn.Execute(strSQL)

		Response.Write(File.Filename & " med storlek " & Round(Int(File.Size / 1024), 2) & " laddades upp i " & File.Path)
	Next

Borttaget i den är endast de rader som "tar hand" om själva bildbehandlingen.
Formulären innehåller method="post" samt enctype="multipart/form-data" och använder inga Request.Form.

Felet uppstår på rader Upload.Save(Server.MapPath("uploaded\")) och det blir ingen skillnad om jag anger en absolut, fysisk sökväg.

Konstigt?

Medlem sedan juni 200032 967 inlägg
#8

Och du har i SakAss, en undermapp som heter Uploaded, där IUSR_xxx har tillräckliga rättigheter?

Medlem sedan nov. 20017 144 inlägg
#9

Har du checkat att slasharna är rätt i sökvägen. / eller \ ?

Medlem sedan feb. 20034 441 inlägg
#10

@nders skrev:

Och du har i SakAss, en undermapp som heter Uploaded, där IUSR_xxx har tillräckliga rättigheter?

Ja, E:\Projekt är min Webroot och den har fullständiga rättigheter för IUSR_Datornamn.

Kollar jag egenskaper för Uploaded så står det att den ärft rättigheterna från E:\Projekt, så allt ska vara rätt.
Blir ju samma sak efter att jag löagt upp den på Webhotellet med.
Och Persits support säger ju inte så himla mkt.

Medlem sedan juni 200032 967 inlägg
#11

Du har alltså en undermapp Uploaded både i Superbike och SakAss. Prova att spara i den som ligger i SuperBike.

Medlem sedan feb. 20034 441 inlägg
#12

@nders skrev:

Du har alltså en undermapp Uploaded både i Superbike och SakAss. Prova att spara i den som ligger i SuperBike.

Nu har jag provat:

Upload.Save(Server.MapPath("../Superbike/Uploaded"))
Upload.Save("E:\Projekt\Superbike\Uploaded")

Både ger samma fel, Odefinerat Fel.

Provade även igår att ta bort all min kod och ersätta med exempel från AspUploads Hjälpsida.
Inte heller det funkar, ger samma sak.

Kan tillägga att samma felmess uppstår då jag lägger ut sidan på nätet och provar.

Medlem sedan feb. 20034 441 inlägg
#13

Är det ingen som använt AspUpload och dykt på samma problem?
Får prova att Googla lite.

Medlem sedan feb. 20034 441 inlägg
#14

Äntligen!
Nu började jag med enklast tänkbara script, ett från den samples-mapp man får.
Därifrån funkade det att ladda upp filer, till c:\upload.

Gick sen vidare och kollade närmare på formuläret:

<table cellpadding="0" cellspacing="0">
<tr>
<td class="text">
	<form action="upload.asp?<%=PID%>" method="post" enctype="multipart/form-data" name="uplForm" onsubmit="return ShowProgress();">
	<table cellpadding="0" cellspacing="0" style="width: 500px;">
	<tr>
	<td class="text"><u>Anl. Nummer</u></td>
	<td class="text"><u>Anl. Adress</u></td>
	</tr>
	<tr>
	<td class="text" style="padding-top: 3px;"><%=gAnl(uId)%><input type="hidden" name="uId" value="<%=uId%>"></td>
	<td class="text" style="padding-top: 3px;"><%=gAddr(uId)%></td>
	</tr>
	<tr>
	<td colspan="2" class="text" style="padding-top: 10px;">Välj en fil för Uppladdning: <font style="font-size: 7pt; color: #B1AFAF;">(.pfd, .doc, .xls, .txt, .jpg, .zip)</font></td>
	</tr>
	<tr>
	<td colspan="2" class="text" style="padding-top: 5px;"><input type="file" name="uFile" class="frm_allow" style="width: 300px;"></td>
	</tr>
	<tr>
	<td colspan="2" class="text" style="padding-top: 5px;"><input type="submit" value="Ladda Upp" class="btn"></td>
	</tr>
	</table>
	</form>
</td>
</tr>
</table>

Under "action" hade jag tidigare action="index.asp?page=upload" och det var biten som ställde till det.

Varför vet jag fortfarande inte, eftersom det funkar så på den där andra sidan, där uploadscriptet har funkat hela tiden.

Någon som ser några direkta fel i den här koden, som exekverar undersidorna:

	Dim strCat, obj
		StrCat = Request.QueryString("page")
	If strCat <> "" Then ' ##### Kollar om sidan finns... #####
 			Set Obj = CreateObject("Scripting.FileSystemObject")
			If Obj.FileExists(Server.MapPath(strCat & ".asp")) Then
				Server.Execute(strCat & ".asp")
			Else
		   %>
            <table cellpadding="0" cellspacing="0" style="width: 340px; margin-left: auto; margin-right: auto; table-layout:fixed; overflow:hidden;">
              <tr> 
                <td class="msgBox_TL"><img src="img/spacer.gif" style="border: 0px;" alt=""></td>
                <td class="msgBox_TH" style="text-align: center;">HTTP 404 - Felmeddelande</td>
                <td class="msgBox_TR"><img src="img/spacer.gif" style="border: 0px;" alt=""></td>
              </tr>
              <tr> 
                <td class="msgBox_LS"><img src="img/spacer.gif" style="border: 0px;" alt=""></td>
                <td class="msgBox_Txt" style="text-align: center;"> Filen '<%=strCat%>.asp' 
                  som du efterfrågade finns inte.<br> <br> <a href="javascript:history.go(-1);" class="spec">Tillbaka</a> 
                </td>
                <td class="msgBox_RS"><img src="img/spacer.gif" style="border: 0px;" alt=""></td>
              </tr>
              <tr> 
                <td class="msgBox_BL"><img src="img/spacer.gif" style="border: 0px;" alt=""></td>
                <td class="msgBox_BF"><img src="img/spacer.gif" style="border: 0px;" alt=""></td>
                <td class="msgBox_BR"><img src="img/spacer.gif" style="border: 0px;" alt=""></td>
              </tr>
            </table>
            <%
		   End if
	Else
		Response.reDirect("?page=start")
	End if
	Set Obj = Nothing
	Set strCat = Nothing

Så, hursomhelst struntar jag att exekvera scriptet som en undersida och går istället direkt till uploadscriptet.

SÅ ruggigt glad att det äntligen funkar, har suttit me't till och från sen i Söndags.

270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)