webForumDet fria alternativet

Modifiera uploadscript

6 svar · 594 visningar · startad av Annakay

AnnakayMedlem sedan sep. 2003117 inlägg
#1

Jag har ett uploadscript (MultiPowUpload) som jag vill modifiera så att jag kan:
där jag vill:

  1. Byta ut filnamnet
  2. Spara filer i flera olika format mha AspJpeg
	'Calls Upload to extract the data from the binary request and then saves the uploaded files
	Public Sub Save(path)
		Dim streamFile, fileItem, postfiles

		if Right(path, 1) <> "\" then path = path & "\"

		if not uploadedYet then Upload
		
		if UploadedFiles.Count > 0 Then
			postfiles = UploadedFiles.Items
			set fileItem = postfiles(0)			
			
			If IsObject(fileItem) Then
	
				Set streamFile = Server.CreateObject("ADODB.Stream")
				streamFile.Type = 1
				streamFile.Open
				StreamRequest.Position=fileItem.Start
				StreamRequest.CopyTo streamFile, fileItem.Length
				streamFile.SaveToFile path & fileItem.FileName, 2
				streamFile.close
				Set streamFile = Nothing
				fileItem.Path = path & fileItem.FileName
			End If
		End If
	End Sub

Jag har ett befintligt script för att spara den aktuella filen i olika format, samt att det matas in i databasen. Först skapas en post med ett ImageGUID som sedan blir filnamnet i de filer som sparas. Sist uppdateras posten med sökvägar, filstorlek och annat.

strSQL = "SET NOCOUNT ON" & vbCrLf &_
				"INSERT INTO g_Bilder ([User], Folder) VALUES (0, " & safeSQL(folder) & ")" & vbCrLf &_
				 "SELECT ImageGUID, ID FROM g_Bilder WHERE id = @@IDENTITY"
		Set objRS = oConn.Execute(strSQL)
		strGUID = objRS("ImageGUID")
		strID = objRS("ID")
		strPath = "img/gallery/bilder/" & strGUID & objFile.Ext
		objRS.Close : Set objRS = Nothing

		objFile.SaveAs(Server.MapPath(strPath))
		Set objJPEG = Server.CreateObject("Persits.JPEG")
		objJPEG.Open(Server.MapPath(strPath))
		strPixel = objJPEG.OriginalWidth & "x" & objJPEG.OriginalHeight

		If objJPEG.Width >= objJPEG.Height AND objJPEG.Width > 150 Then
			objJPEG.Width = 150
			objJPEG.Height = 150*objJPEG.Height/objJPEG.OriginalWidth
		End If

		If objJPEG.Height > objJPEG.Width AND objJPEG.Height > 150 Then
			objJPEG.Height = 150
			objJPEG.Width = 150*objJPEG.Width/objJPEG.OriginalHeight
		End If

		objJPEG.Save(Server.MapPath("img/gallery/bilder/th_" & strGUID & objFile.Ext))
			strThumb = "img/gallery/bilder/th_" & strGUID & objFile.Ext

		objJPEG.Open(Server.MapPath(strPath))

		If objJPEG.Width >= objJPEG.Height AND objJPEG.Width > 600 Then
			objJPEG.Width = 600
			objJPEG.Height = 600*objJPEG.Height/objJPEG.OriginalWidth
		End If

		If objJPEG.Height > objJPEG.Width AND objJPEG.Height > 600 Then
			objJPEG.Height = 600
			objJPEG.Width = 600*objJPEG.Width/objJPEG.OriginalHeight
		End If

			objJPEG.Save(Server.MapPath("img/gallery/bilder/sp_" & strGUID & objFile.Ext))
			strSample = "img/gallery/bilder/sp_" & strGUID & objFile.Ext

		objJPEG.Open(Server.MapPath(strPath))

		If objJPEG.Width >= objJPEG.Height AND objJPEG.Width > 75 Then
			objJPEG.Width = 75
			objJPEG.Height = 75*objJPEG.Height/objJPEG.OriginalWidth
		End If

		If objJPEG.Height > objJPEG.Width AND objJPEG.Height > 75 Then
			objJPEG.Height = 75
			objJPEG.Width = 75*objJPEG.Width/objJPEG.OriginalHeight
		End If

			objJPEG.Save(Server.MapPath("img/gallery/bilder/pb_" & strGUID & objFile.Ext))
			strPic = "img/gallery/bilder/pb_" & strGUID & objFile.Ext
		
		intSize = Round(objFile.Size/1024)

		If intSize = 0 Then intSize = 1

		strSQL = "UPDATE g_Bilder SET Path = '" & safeSQL(strPath) & "', ThumbnailPath = '" & safeSQL(strThumb) & "', PicboxPath = '" & safeSQL(strPic) & "', SamplePath = '" & safeSQL(strSample) & "', PixelSize = '" & safeSQL(strPixel) & "', Size = " & intSize & " WHERE ID = '" & strID & "'"
		oConn.Execute strSQL,,128

Jag behöver hjälp med att integrera dessa script med varandra. Åtminstone en fingervisning då jag inte är riktigt haj på vad alla kodrader gör.

AnnakayMedlem sedan sep. 2003117 inlägg
#2

Jag kan säga att jag HAR försökt men jag får bara ett 500-felmeddelande (indatat kommer från en Flash-applikation som genererar det meddelandet, jag har slagit på Friendly error messages i webbläsaren utan att få vettigare felmeddelande så jag vet inte VAR felet ligger)

	'Calls Upload to extract the data from the binary request and then saves the uploaded files
	Public Sub Save(path)
		Dim streamFile, fileItem, postfiles

		if Right(path, 1) <> "\" then path = path & "\"

		if not uploadedYet then Upload

		if UploadedFiles.Count > 0 Then
			postfiles = UploadedFiles.Items
			set fileItem = postfiles(0)

			If IsObject(fileItem) Then

strSQL = "SET NOCOUNT ON" & vbCrLf &_
							 "INSERT INTO g_Bilder ([User], Folder) VALUES (0, " & safeSQL(folder) & ")" & vbCrLf &_
							 "SELECT ImageGUID, ID FROM g_Bilder WHERE id = @@IDENTITY"
					Set objRS = oConn.Execute(strSQL)
					strGUID = objRS("ImageGUID")
					strID = objRS("ID")
					if Mid(Reverse(fileitem.FileName),4,1) = "." THEN
						FileExt = Right(fileItem.FileName, 4)
					elseif Mid(Reverse(fileitem.FileName),5,1) = "." THEN
						FileExt = Right(fileItem.FileName, 4)
					else
						FileExt = ".jpg"
					End if

					strPath = path & strGUID & FileExt
					objRS.Close : Set objRS = Nothing

					Set streamFile = Server.CreateObject("ADODB.Stream")
					streamFile.Type = 1
					streamFile.Open
					StreamRequest.Position=fileItem.Start
					StreamRequest.CopyTo streamFile, fileItem.Length
					streamFile.SaveToFile strPath, 2
					streamFile.close
					Set streamFile = Nothing
					fileItem.Path = strPath

					Set objJPEG = Server.CreateObject("Persits.JPEG")
					objJPEG.Open(Server.MapPath(strPath))
					strPixel = objJPEG.OriginalWidth & "x" & objJPEG.OriginalHeight

					If objJPEG.Width >= objJPEG.Height AND objJPEG.Width > 150 Then
						objJPEG.Width = 150
						objJPEG.Height = 150*objJPEG.Height/objJPEG.OriginalWidth
					End If

					If objJPEG.Height > objJPEG.Width AND objJPEG.Height > 150 Then
						objJPEG.Height = 150
						objJPEG.Width = 150*objJPEG.Width/objJPEG.OriginalHeight
					End If
						strThumb = path & "th_" & strGUID & FileExt

							Set streamFile = Server.CreateObject("ADODB.Stream")
							streamFile.Type = 1
							streamFile.Open
							StreamRequest.Position=fileItem.Start
							StreamRequest.CopyTo streamFile, fileItem.Length
							streamFile.SaveToFile strThumb, 2
							streamFile.close
							Set streamFile = Nothing
							fileItem.Path = strThumb

					objJPEG.Open(Server.MapPath(strPath))

					If objJPEG.Width >= objJPEG.Height AND objJPEG.Width > 600 Then
						objJPEG.Width = 600
						objJPEG.Height = 600*objJPEG.Height/objJPEG.OriginalWidth
					End If

					If objJPEG.Height > objJPEG.Width AND objJPEG.Height > 600 Then
						objJPEG.Height = 600
						objJPEG.Width = 600*objJPEG.Width/objJPEG.OriginalHeight
					End If

						strSample = path & "sp_" & strGUID & FileExt
							Set streamFile = Server.CreateObject("ADODB.Stream")
							streamFile.Type = 1
							streamFile.Open
							StreamRequest.Position=fileItem.Start
							StreamRequest.CopyTo streamFile, fileItem.Length
							streamFile.SaveToFile strSample, 2
							streamFile.close
							Set streamFile = Nothing
							fileItem.Path = strSample

					objJPEG.Open(Server.MapPath(strPath))

					If objJPEG.Width >= objJPEG.Height AND objJPEG.Width > 75 Then
						objJPEG.Width = 75
						objJPEG.Height = 75*objJPEG.Height/objJPEG.OriginalWidth
					End If

					If objJPEG.Height > objJPEG.Width AND objJPEG.Height > 75 Then
						objJPEG.Height = 75
						objJPEG.Width = 75*objJPEG.Width/objJPEG.OriginalHeight
					End If

						strPic = path & "pb_" & strGUID & FileExt
							Set streamFile = Server.CreateObject("ADODB.Stream")
							streamFile.Type = 1
							streamFile.Open
							StreamRequest.Position=fileItem.Start
							StreamRequest.CopyTo streamFile, fileItem.Length
							streamFile.SaveToFile strPic, 2
							streamFile.close
							Set streamFile = Nothing
							fileItem.Path = strPic

					intSize = Round(objFile.Size/1024)

					If intSize = 0 Then intSize = 1

					strSQL = "UPDATE g_Bilder SET Path = '" & safeSQL(strPath) & "', ThumbnailPath = '" & safeSQL(strThumb) & "', PicboxPath = '" & safeSQL(strPic) & "', SamplePath = '" & safeSQL(strSample) & "', PixelSize = '" & safeSQL(strPixel) & "', Size = " & intSize & " WHERE ID = '" & strID & "'"
					oConn.Execute strSQL,,128
@ndersMedlem sedan juni 200026 914 inlägg
#3

Friendly error messages ska ju vara av, inte på.
Börja med det, och återkom sedan.

Mvh

AnnakayMedlem sedan sep. 2003117 inlägg
#4

@nders skrev:

Friendly error messages ska ju vara av, inte på.
Börja med det, och återkom sedan.

Mvh

Ja, det var det jag menade. :r Jag har haft det avslaget ett bra tag... Jag får vettiga felmeddelanden överallt annars, men inte nu. Förmodligen eftersom det är själva Flash-delen som genererar felmeddelandet.

"HTTP Error, '500' occurred. Internal Server Error. Usually it means that receiving script have errors.
Please see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1 error code definitions for more information. "

Det är allt jag får, inte så hjälpande direkt...

AnnakayMedlem sedan sep. 2003117 inlägg
#5

Hmm, jag har stegat mig igenom hela koden och kommit fram till att det är raden som skapar en connection till databasen som stör.

Set oConn = server.CreateObject("ADODB.Connection")

Jag måste ju ha en connection till databasen... Någon som har en idé om hur jag kommer förbi detta?

@ndersMedlem sedan juni 200026 914 inlägg
#6

Var har du den raden då? Det behöver ju inte vara exakt den raden, utan kanske något i närheten. Så - hur ser koden där ut?

Har du testat att köra scriptet utan flash-delen, dvs med ett vanligt html-formulär?

Om du kör detta på en egen IIS kan det också vara så att IIS-en ger dig ett felmeddelande du inte vill ha. Vissa webhotell slänger också ut 500-fel utan mer information, ex Crystone.

AnnakayMedlem sedan sep. 2003117 inlägg
#7

Var jag än placerar den raden så bryter den just där. Jag har haft den först i koden, mitt i och efter själva skrivandet till disk, då laddades bilden upp men jag fick felmeddelande när databasen skulle kontaktas. Om jag tar själva originalscriptet (det utan databasanrop och AspJPEG-kod) så laddar den upp som den ska, men lägger jag till den enda raden:
Set oConn = server.CreateObject("ADODB.Connection")
(efter att jag deklarerat variabeln oConn) så fungerar det inte. Så jag är tämligen säker på att det är den raden som stör.

Jag ska prova att köra via ett vanligt formulär och se om jag får nåt vettigare felmeddelande...

Genererad på 395 ms · cache AV · v20260730165559-full.f96bc7eb