webForumDet fria alternativet

Lagras inte rätt namn i databasen

ASP

7 svar · 513 visningar · startad av SGuncel

Medlem sedan jan. 2007217 inlägg
Frågan#1

Hej!

Jag har gjort så att bilden man laddar upp ska skäras om och sparas med orginala namnet. Men jag har ej kunnat lösa det. Testade och ha & File.FileName men det var inte rätt.

<form name="frmUpload" method="post" enctype="multipart/form-data" action="?Upload=newpic">
<input type="file" name="PicName" style="width: 480;"></td>
<p></p>
<p></p>
<input type="submit" value="Ladda upp" style="width: 480;">
</form>

<%
	Set ObjConn = Server.CreateObject("ADODB.Connection") 
	ObjConn.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("xxxx")

' Länken i formen.
IF Request.Querystring("Upload")="newpic" then

Set Upload = Server.CreateObject("Persits.Upload")

' Use AspJpeg to resize image
Set Jpeg = Server.CreateObject("Persits.Jpeg")

' Capture and save uploaded image to the same directory as script
Upload.SaveVirtual "../_images/_bilder"

For Each File in Upload.Files
	If File.Size > 580000 Then
		Response.Write "Filen är för stor"
		File.Delete
		Response.End
	End If

	If File.ImageType <> "JPG" Then
		Session("Error") = "Bilden du valde var inte JPG format!"
		File.Delete
		Response.End
	End If

	Jpeg.Open File.Path

	L = 750
	
	Jpeg.Quality = 100
	Jpeg.Width = L
	Jpeg.Height = Jpeg.OriginalHeight * L / Jpeg.OriginalWidth

	Jpeg.Save(Server.MapPath("../_images/_bilder") & "\" & File.ExtractFileName)
Next

' Kontrollerar vilken man har valt och sen sparar den.
ObjConn.Execute("Insert into bilder (bild, bildthumb) values ('../_images/_bilder/& File.FileName.jpg', '../_images/_bilder/& File.FileName_thumb.jpg')")

ObjConn.Close
Set ObjConn = Nothing

Session("Finish") = "Nu är bilden upladdad!"

Response.Redirect "Upload.asp"
End if
%>
Medlem sedan feb. 20034 441 inlägg
#2

Enligt manualen ska du använda File.Name.

Men felet i ditt fall är att du försöker använda File.Name utanför din loop.
Eftersom du loopar igenom Upload.Files måste du köra frågan (sql insert) för varje bild, inuti loopen.

Medlem sedan juni 20019 519 inlägg
#3

Inte bara det, men din SQL fråga kommer aldrig att fungera på det sätt du vill heller:

ObjConn.Execute("Insert into bilder (bild, bildthumb) values ('../_images/_bilder/& File.FileName.jpg', '../_images/_bilder/& File.FileName_thumb.jpg')")

Det den sparar ner är:
../_images/_bilder/& file.FileName.jpg

i fältet vilket du kanske hade hellre velat ha:
../_images/_bilder/bildensnamn.jpg
bryt Strängen och få igång asp objektet file, placera in file innanför loopen och fixar följande fel:
objektet file har inte någon property som heter FileName_thumb.jpg heller

Medlem sedan jan. 2007217 inlägg
#4

Måste jag ha:

ObjConn.Execute("Insert into bilder (bild, bildthumb) values ('../_images/_bilder/& File.FileName.jpg', '../_images/_bilder/& File.FileName_thumb.jpg')")

Inom "Next" då?

voigtann1:
Förstog inte riktigt vad du mena med det.

"bryt Strängen och få igång asp objektet file, placera in file innanför loopen och fixar följande fel:
objektet file har inte någon property som heter FileName_thumb.jpg heller"

Medlem sedan feb. 20034 441 inlägg
#5

Typ såhär:

<form name="frmUpload" method="post" enctype="multipart/form-data" action="?Upload=newpic">
<input type="file" name="PicName" style="width: 480;"></td>
<p></p>
<p></p>
<input type="submit" value="Ladda upp" style="width: 480;">
</form>

<%
	Set ObjConn = Server.CreateObject("ADODB.Connection") 
	ObjConn.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("xxxx")

' Länken i formen.
IF Request.Querystring("Upload")="newpic" then

Set Upload = Server.CreateObject("Persits.Upload")

' Use AspJpeg to resize image
Set Jpeg = Server.CreateObject("Persits.Jpeg")

' Capture and save uploaded image to the same directory as script
Upload.SaveVirtual "../_images/_bilder"

For Each File in Upload.Files
	If File.Size > 580000 Then
		Response.Write "Filen är för stor"
		File.Delete
		Response.End
	End If

	If File.ImageType <> "JPG" Then
		Session("Error") = "Bilden du valde var inte JPG format!"
		File.Delete
		Response.End
	End If

	Jpeg.Open File.Path

	L = 750
	
	Jpeg.Quality = 100
	Jpeg.Width = L
	Jpeg.Height = Jpeg.OriginalHeight * L / Jpeg.OriginalWidth

	Jpeg.Save(Server.MapPath("../_images/_bilder") & "\" & File.ExtractFileName)

	' Kontrollerar vilken man har valt och sen sparar den.[b]
	ObjConn.Execute("INSERT INTO bilder " &_
			"(bild, bildthumb) " &_
			"VALUES " &_
			"(" &_
			"'../_images/_bilder/" & File.FileName & ".jpg', " &_
			"'../_images/_bilder/" & File.FileName & "_thumb.jpg'" &_
			")")[/b]

	ObjConn.Close

Next

Set ObjConn = Nothing

Session("Finish") = "Nu är bilden upladdad!"

Response.Redirect "Upload.asp"
End if
%>

Men du måste fortfarande skapa tumnagel, spara den med nytt namn och sen hänsvisa till _rätt_ filnamn i din sqlfråga.

Medlem sedan juni 20019 519 inlägg
#6

en ASP sträng bryter du:

dim strText
strText = "hej " & "på " & " dig"
inte som du försöker:
strText = "hej & på & dig"

Medlem sedan feb. 20034 441 inlägg
#7

Om du kollar mitt exempel två inlägg upp så har jag fixat din fråga, så att den blir rätt.

ObjConn.Execute("INSERT INTO bilder " &_
		"(bild, bildthumb) " &_
		"VALUES " &_
		"(" &_
		"'../_images/_bilder/" & File.FileName & ".jpg', " &_
		"'../_images/_bilder/" & File.FileName & "_thumb.jpg'" &_
		")")
Medlem sedan juni 20019 519 inlägg
#8

jag gjorde ett annat exempel, bryter ut så att man kanske skulle kunna använda detta på fler än ett ställe:

<%
Dim sSaveFolder
sSaveFolder = "../_images/_bilder/"

Set ObjConn = Server.CreateObject("ADODB.Connection") 
ObjConn.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("../_databas/lidingovasadb.mdb")
' Länken i formen.
IF Request.Querystring("Upload")="newpic" then
	Set Upload = Server.CreateObject("Persits.Upload")
	' Use AspJpeg to resize image
	Set Jpeg = Server.CreateObject("Persits.Jpeg")
	' Capture and save uploaded image to the same directory as script
	Upload.SaveVirtual sSaveFolder
	For Each File in Upload.Files
		If File.Size > 580000 Then
			Response.Write "Filen är för stor"
			File.Delete
			Response.End
		End If
		If File.ImageType <> "JPG" Then
			Session("Error") = "Bilden du valde var inte JPG format!"
			File.Delete
			Response.End
		End If
		
		Dim sOrginalFile, sThumbnail
		'Save the file with a new time, orginal_filename.jpg
		sOrginalFile = Resize(Jpeg, file, "orginal", null, sSaveFolder)
		'Resize the image and saves it like: thumb_filename.jpg
		sThumbnail = Resize(Jpeg, file, "thumb", 750, sSaveFolder)
		
		'save it to the database
		ObjConn.Execute("Insert into bilder (bild, bildthumb) values ('" & sOrginalFile & "', '" & sThumbnail & "')")
		'Delete Original file, we allready saved it with the resize function, and renamed it.
		File.Delete
	Next

	Session("Finish") = "Nu är bilden upladdad!"
	ObjConn.Close
	Set ObjConn = Nothing
	Set Upload = Nothing
	Set Jpeg = Nothing
	Response.Redirect "Upload.asp"
End if

Function Resize(objJpeg, file, name, size, Folder)
		objJpeg.Open File.Path
		objJpeg.Quality = 100
		If IsNull(size) Then
			objJpeg.Width = size
			objJpeg.Height = objJpeg.OriginalHeight * size / objJpeg.OriginalWidth
		End If
		objJpeg.Save(Server.MapPath(Folder) & name & "_" & File.ExtractFileName)
		'Returns the filePath for the image
		Resize = Folder & name & "_" & File.ExtractFileName
End Function
%>

annan lösning, men i princip samma sak.

Sparar om orginal bilden och lägger in ett prefix på den samt skapar en thumb_ prefix. sen skulle den kunna skapa en del andra skalningar utan att behöva göra en massa extra kod.

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