webForumDet fria alternativet

Upload av bild med width och height

ASPur ASP

25 svar · 1 478 visningar · startad av Inferis

InferisMedlem sedan sep. 2000670 inlägg
#1

Jag använder mig av denna kod för att ladda upp bilder till en databas. Kan man på nåt sätt ta reda på höjd och bredd på bilden och skriva in det i egna kolumner?

	Class Loader
		Private dict
		
		Private Sub Class_Initialize
			Set dict = Server.CreateObject("Scripting.Dictionary")
		End Sub
		
		Private Sub Class_Terminate
			If IsObject(intDict) Then
				intDict.RemoveAll
				Set intDict = Nothing
			End If
			If IsObject(dict) Then
				dict.RemoveAll
				Set dict = Nothing
			End If
		End Sub

		Public Property Get Count
			Count = dict.Count
		End Property

		Public Sub Initialize
			Dim binData
				binData = Request.BinaryRead(Request.TotalBytes)
				getData binData
		End Sub
		
		Public Function getFileData(name)
			If dict.Exists(name) Then
				getFileData = dict(name).Item("Value")
				Else
				getFileData = stringToByte("Not Found")
			End If
		End Function
		
		Public Function getValue(name)
			If dict.Exists(name) Then
				getValue = CStr(dict(name).Item("Value"))
				Else
				getValue = "Not Found"
			End If
		End Function
		
		Public Function getFileName(name)
			If dict.Exists(name) Then
				Dim temp, tempPos
					temp = dict(name).Item("FileName")
					tempPos = 1 + InStrRev(temp, "\")
					getFileName = Mid(temp, tempPos)
				Else
				getFileName = "Not Found"
			End If
		End Function
		
		Public Function getFilePath(name)
			If dict.Exists(name) Then
				Dim temp, tempPos
					temp = dict(name).Item("FileName")
					tempPos = InStrRev(temp, "\")
					getFilePath = Mid(temp, 1, tempPos)
				Else
				getFilePath = "Not Found"
			End If
		End Function
		
		Public Function getFilePathComplete(name)
			If dict.Exists(name) Then
				getFilePathComplete = dict(name).Item("FileName")
				Else
				getFilePathComplete = "Not Found"
			End If
		End Function
		
		Public Function getFileSize(name)
			If dict.Exists(name) Then
				getFileSize = LenB(dict(name).Item("Value"))
				Else
				getFileSize = "Not Found"
			End If
		End Function

		Public Function getFileSizeTranslated(name)
			If dict.Exists(name) Then
				temp = 1 + LenB(dict(name).Item("Value"))
					If Len(temp) <= 3 Then
						getFileSizeTranslated = temp & " bytes"
						ElseIf Len(temp) > 6 Then
						temp = FormatNumber(((temp / 1024) / 1000), 2)
						getFileSizeTranslated = temp & " megabytes"	
						Else
						temp = FormatNumber((temp / 1024), 2)
						getFileSizeTranslated = temp & " kilobytes"
					End If
				Else
				getFileSize = "Not Found"
			End If
		End Function
		
		Public Function getContentType(name)
			If dict.Exists(name) Then
				getContentType = dict(name).Item("ContentType")
				Else
				getContentType = "Not Found"
			End If
		End Function

	Private Sub getData(rawData)
		Dim separator 
			separator = MidB(rawData, 1, InstrB(1, rawData, ChrB(13)) - 1)

		Dim lenSeparator
			lenSeparator = LenB(separator)

		Dim currentPos
			currentPos = 1
		Dim inStrByte
			inStrByte = 1
		Dim value, mValue
		Dim tempValue
			tempValue = ""

		While inStrByte > 0
			inStrByte = InStrB(currentPos, rawData, separator)
			mValue = inStrByte - currentPos

			If mValue > 1 Then
				value = MidB(rawData, currentPos, mValue)

				Dim begPos, endPos, midValue, nValue
				Dim intDict
					Set intDict = Server.CreateObject("Scripting.Dictionary")
		
					begPos = 1 + InStrB(1, value, ChrB(34))
					endPos = InStrB(begPos + 1, value, ChrB(34))
					nValue = endPos

				Dim nameN
					nameN = MidB(value, begPos, endPos - begPos)

				Dim nameValue
					If InStrB(1, value, stringToByte("Content-Type")) > 1 Then

						begPos = 1 + InStrB(endPos + 1, value, ChrB(34))
						endPos = InStrB(begPos + 1, value, ChrB(34))
						
						midValue = MidB(value, begPos, endPos - begPos)
							intDict.Add "FileName", trim(byteToString(midValue))
								
						begPos = 14 + InStrB(endPos + 1, value, stringToByte("Content-Type:"))
						endPos = InStrB(begPos, value, ChrB(13))
						
						midValue = MidB(value, begPos, endPos - begPos)
							intDict.Add "ContentType", trim(byteToString(midValue))
						
						begPos = endPos + 4
						endPos = LenB(value)
						
						nameValue = MidB(value, begPos, endPos - begPos)
					Else
						nameValue = trim(byteToString(MidB(value, nValue + 5)))
					End If

					intDict.Add "Value", nameValue
					intDict.Add "Name", nameN

					dict.Add byteToString(nameN), intDict
			End If

			currentPos = lenSeparator + inStrByte
		Wend
	End Sub
	
	End Class
@ndersMedlem sedan juni 200032 969 inlägg
#2

Om man vågar sig på att söka lite här på wF så finns det en chans att man hittar kod för att ta reda på en bilds dimensioner. Jag hittade lite kul när jag sökte på ex. bredd.

Mvh

InferisMedlem sedan sep. 2000670 inlägg
#3

Jag gjorde en sökning på bl a imagesize, height, höjd, bredd width, resize, dimension, upload, binary.write, bild, storlek osv men fann ändå ingen lösning. Ingen som jag förstod mig på iaf.

InferisMedlem sedan sep. 2000670 inlägg
#4

Jag har försökt att följa dessa trådar, men kan ändå inte få in höjden och bredden på bilden. :-/

Länk 1

.Länk 2

Hur får man en variabel från javascriptet i databasen?

rs("Bredd") = document.bilden.width  
rs("Hojd") = document.bilden.height

Fungerar inte

@ndersMedlem sedan juni 200032 969 inlägg
#5

Scriptet i länk 1 har jag testat tidigare, och det vill jag minnas fungerade fint.

Javascriptvärden får du skicka till sidan med ex. querystrings.

InferisMedlem sedan sep. 2000670 inlägg
#6

Jag laddar in bilderna i en Accessdatabas.

InferisMedlem sedan sep. 2000670 inlägg
#7

Det verkar inte som om javascriptet fungerar när man hämrat bilder från en databas heller.
Får som svar på ena javascriptet:
Mått: 0 * 0 (Bilden visas som den ska dock)

@ndersMedlem sedan juni 200032 969 inlägg
#8

Finns det någon speciell anledning till att du sparar bilderna i en databas? Scriptet i länk 1 hämtar ju bilder från disk.

InferisMedlem sedan sep. 2000670 inlägg
#9

Ja det finns en speciell anledning till det.
Men javascript funkar inte med Binary.write eller?
Hur kan man lösa det på annat sätt? hittar inget som hjälper mig när jag söker.

@ndersMedlem sedan juni 200032 969 inlägg
#10

Javascript har inget med binarywrite att göra. Javascript använder du på sidan där du väljer bild, dvs inte samma sida du tar emot bilden med.

InferisMedlem sedan sep. 2000670 inlägg
#11

Detta funkar inte iaf.
(Voigtanns script)

<%
Dim Bild,text,rubrik
Bild = Request.QueryString("id")
%>
<img src="visabild.asp?id=<%=bild%>" name="bilden"><br>

<script language="javascript"> 
document.write(" Mått: " +document.bilden.width + " * " + document.bilden.height); 
</script>

Här koden i visabild.asp

dim ID
id=Request.QueryString("ID")
set rs=conn.execute("Select * from files where ID=" & ID & "")
Response.ContentType=rs("Content Type")
Response.BinaryWrite(rs("File Data"))

Bilderna visas som dem ska, men javascriptet skriver Mått: 0 * 0

@ndersMedlem sedan juni 200032 969 inlägg
#12

Konstigt. Koden fungerar hos mig, i alla fall om jag använder en "riktig" bild. Har du provat med en vanlig bild för att se om det är där problemet ligger hos dig?

Vad var det för problem med att använda asp-scriptet i den första länken du skickade?

InferisMedlem sedan sep. 2000670 inlägg
#13

Jag försöker kolla storleken på bilden när den skrivs ut från en databas.
Finns det nåt sätt att få in bredd och höjd när man laddar upp filen istället? Jag vet inte hur man får javascriptet att bli ett value i formuläret när man laddar upp bilden.

InferisMedlem sedan sep. 2000670 inlägg
#14

@nders:
Koden fungerar på bilder sparade som filer på servern.

@ndersMedlem sedan juni 200032 969 inlägg
#15

Ah, just det, så var det med den ja. Kan du inte temporärspara filerna på servern, för att kolla storleken?

Annars får du modifiera scriptet så du kan använda det för filer från en databas.

InferisMedlem sedan sep. 2000670 inlägg
#16

Jag visar all kod (nerbantad från tabeller ody) i bild.asp.
Formuläret är på samma sida som koden som skriver in i db:n. Allt fungerar som det ska, men hur gör man för att få in Höjden och Bredden i fälten Hojd o Bredd i databasen?

<% 
Server.ScriptTimeout = 2000

Dim conn, ssql, rs
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../db/bild.mdb")
Set rs = Server.CreateObject("ADODB.Command")
	
	Class Loader
		Private dict
		
		Private Sub Class_Initialize
			Set dict = Server.CreateObject("Scripting.Dictionary")
		End Sub
		
		Private Sub Class_Terminate
			If IsObject(intDict) Then
				intDict.RemoveAll
				Set intDict = Nothing
			End If
			If IsObject(dict) Then
				dict.RemoveAll
				Set dict = Nothing
			End If
		End Sub

		Public Property Get Count
			Count = dict.Count
		End Property

		Public Sub Initialize
			Dim binData
				binData = Request.BinaryRead(Request.TotalBytes)
				getData binData
		End Sub
		
		Public Function getFileData(name)
			If dict.Exists(name) Then
				getFileData = dict(name).Item("Value")
				Else
				getFileData = stringToByte("Not Found")
			End If
		End Function
		
		Public Function getValue(name)
			If dict.Exists(name) Then
				getValue = CStr(dict(name).Item("Value"))
				Else
				getValue = "Not Found1"
			End If
		End Function
		
		Public Function getFileName(name)
			If dict.Exists(name) Then
				Dim temp, tempPos
					temp = dict(name).Item("FileName")
					tempPos = 1 + InStrRev(temp, "\")
					getFileName = Mid(temp, tempPos)
				Else
				getFileName = "Not Found2"
			End If
		End Function
		
		Public Function getFilePath(name)
			If dict.Exists(name) Then
				Dim temp, tempPos
					temp = dict(name).Item("FileName")
					tempPos = InStrRev(temp, "\")
					getFilePath = Mid(temp, 1, tempPos)
				Else
				getFilePath = "Not Found3"
			End If
		End Function
		
		Public Function getFilePathComplete(name)
			If dict.Exists(name) Then
				getFilePathComplete = dict(name).Item("FileName")
				Else
				getFilePathComplete = "Not Found4"
			End If
		End Function
		
		Public Function getFileSize(name)
			If dict.Exists(name) Then
				getFileSize = LenB(dict(name).Item("Value"))
				Else
				getFileSize = "Not Found5"
			End If
		End Function

		Public Function getFileSizeTranslated(name)
			If dict.Exists(name) Then
				temp = 1 + LenB(dict(name).Item("Value"))
					If Len(temp) <= 3 Then
						getFileSizeTranslated = temp & " bytes"
						ElseIf Len(temp) > 6 Then
						temp = FormatNumber(((temp / 1024) / 1000), 2)
						getFileSizeTranslated = temp & " megabytes"	
						Else
						temp = FormatNumber((temp / 1024), 2)
						getFileSizeTranslated = temp & " kilobytes"
					End If
				Else
				getFileSize = "Not Found6"
			End If
		End Function
		
		Public Function getContentType(name)
			If dict.Exists(name) Then
				getContentType = dict(name).Item("ContentType")
				Else
				getContentType = "Not Found7"
			End If
		End Function

	Private Sub getData(rawData)
		Dim separator 
			separator = MidB(rawData, 1, InstrB(1, rawData, ChrB(13)) - 1)

		Dim lenSeparator
			lenSeparator = LenB(separator)

		Dim currentPos
			currentPos = 1
		Dim inStrByte
			inStrByte = 1
		Dim value, mValue
		Dim tempValue
			tempValue = ""

		While inStrByte > 0
			inStrByte = InStrB(currentPos, rawData, separator)
			mValue = inStrByte - currentPos

			If mValue > 1 Then
				value = MidB(rawData, currentPos, mValue)

				Dim begPos, endPos, midValue, nValue
				Dim intDict
					Set intDict = Server.CreateObject("Scripting.Dictionary")
		
					begPos = 1 + InStrB(1, value, ChrB(34))
					endPos = InStrB(begPos + 1, value, ChrB(34))
					nValue = endPos

				Dim nameN
					nameN = MidB(value, begPos, endPos - begPos)

				Dim nameValue
					If InStrB(1, value, stringToByte("Content-Type")) > 1 Then

						begPos = 1 + InStrB(endPos + 1, value, ChrB(34))
						endPos = InStrB(begPos + 1, value, ChrB(34))
						
						midValue = MidB(value, begPos, endPos - begPos)
							intDict.Add "FileName", trim(byteToString(midValue))
								
						begPos = 14 + InStrB(endPos + 1, value, stringToByte("Content-Type:"))
						endPos = InStrB(begPos, value, ChrB(13))
						
						midValue = MidB(value, begPos, endPos - begPos)
							intDict.Add "ContentType", trim(byteToString(midValue))
						
						begPos = endPos + 4
						endPos = LenB(value)
						
						nameValue = MidB(value, begPos, endPos - begPos)
					Else
						nameValue = trim(byteToString(MidB(value, nValue + 5)))
					End If

					intDict.Add "Value", nameValue
					intDict.Add "Name", nameN

					dict.Add byteToString(nameN), intDict
			End If

			currentPos = lenSeparator + inStrByte
		Wend
	End Sub
	
	End Class

	Private Function stringToByte(toConv)
		Dim tempChar
		 For i = 1 to Len(toConv)
		 	tempChar = Mid(toConv, i, 1)
			stringToByte = stringToByte & chrB(AscB(tempChar))
		 Next
	End Function

	Private Function byteToString(toConv)
		For i = 1 to LenB(toConv)
			byteToString = byteToString & chr(AscB(MidB(toConv,i,1))) 
		Next
	End Function

on error resume next
Dim Added
Added="False"

if Request.QueryString("ID")="True" and err.number=0 Then

	Added="True"
		
	Response.Buffer = True

	' load object
	Dim load
		Set load = new Loader
		
		' calling initialize method
		load.initialize
		
	' File binary data
	Dim fileData
		fileData = load.getFileData("file")
	' File name
	Dim fileName
		fileName = LCase(load.getFileName("file"))

	' File path
	Dim filePath
		filePath = load.getFilePath("file")
	' File path complete
	Dim filePathComplete
		filePathComplete = load.getFilePathComplete("file")
	' File size
	Dim fileSize
		fileSize = load.getFileSize("file")
	' File size translated
	Dim fileSizeTranslated
		fileSizeTranslated = load.getFileSizeTranslated("file")
	' Content Type
	Dim contentType
		contentType = load.getContentType("file")
	' No. of Form elements
	Dim countElements
		countElements = load.Count
	' Value of text input field "name"
	Dim nameInput
		nameInput = load.getValue("name")
	' Beskrivning
	Dim Beskrivning
		Beskrivning = load.getvalue("Beskrivning")
	' Hojd
	Dim HojdIn
		HojdInput = load.getvalue("Hojd")
	' Bredd
	Dim BreddIn
		BreddInput = load.getvalue("Bredd")
	' destroying load object
	Set load = Nothing
End if

if err.number<>0 then
	session("errors")="Fel"
else 
	session("errors")=""
end if

%>
<%=session("errors")%>
<% 
if Added="True" and err.number=0 then

else
			Set rs = Server.CreateObject("ADODB.Recordset")
			rs.Open "Files", conn, 2, 2
			rs.AddNew
				rs("File Name") = fileName
				rs("File Size") = fileSize
				rs("File Data").AppendChunk fileData
				rs("Content Type") = contentType
rs("Bildtext") = Beskrivning
rs("Datum") = Now()
rs("Bredd") = BreddIn 
rs("Hojd") = HojdIn 
			rs.Update
			rs.Close
			Set rs = Nothing		
		If Err.number = 0 Then
			Else
		End If
		end if
End if
%>
<form method="POST" enctype="multipart/form-data" action="bild.asp?ID=True" id=form1 name=form1>
<input type="text" name="Beskrivning" size="40" value="<%=Beskrivning%>">
<INPUT TYPE="hidden" NAME="Hojd" Value="">
<INPUT TYPE="hidden" NAME="Bredd" Value="">
<input type="file" name="file" size="40" value="<%=fileData%>">
<input type="submit" value="Ladda upp bild" id=submit1 name=Submit>
</form>
<%
conn.Close
Set conn= Nothing 
%>
InferisMedlem sedan sep. 2000670 inlägg
#17

Är det jättesvårt?

@ndersMedlem sedan juni 200032 969 inlägg
#18

En snabb omskrivning av scriptet i PatrikBs inlägg i den tråd du länkar till ovan:

<HTML>
<HEAD>
<TITLE>Untitled Document</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<SCRIPT language="javascript">
function checkSize(obj){
	var imgpath = obj.value;
	var imgTemp = new Image();
	imgTemp.src = imgpath;

	intWidth = imgTemp.width;
	intHeight = imgTemp.height;
	document.forms[0].action='test2.htm?height='+intHeight+'&width='+intWidth;
	document.forms[0].submit();
}
</SCRIPT>
</HEAD>

<BODY bgcolor="#FFFFFF" text="#000000">
<FORM name="form1" method="post" enctype="multipart/form-data">
  <INPUT type="file" name="file">
  <INPUT type="button" value="Submit" onclick="checkSize(document.form1.file);">
</FORM>
</BODY>
</HTML>

Sen är det bara att plocka in det som skickades i querystring för att spara höjd och bredd.

Jag har inte testat det dock, men det ser ut att kunna fungera.

InferisMedlem sedan sep. 2000670 inlägg
#19

Tack så mycket! Det funkade perfekt!
Hade inte klarat det med hjälp av andra lösningar här på forumet.

InferisMedlem sedan sep. 2000670 inlägg
#20

Det fungerade inte så perfekt... Det funkar ibland, men inte alla gånger.
Vet någon varför?

139 ms totalt · 3 externa anrop · v20260731065814-full.a2ca460b
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)