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
25 svar · 1 478 visningar · startad av Inferis
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
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
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.
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.
Jag laddar in bilderna i en Accessdatabas.
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)
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.
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.
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.
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
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?
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.
@nders:
Koden fungerar på bilder sparade som filer på servern.
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.
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
%>
Är det jättesvårt?
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.
Tack så mycket! Det funkade perfekt!
Hade inte klarat det med hjälp av andra lösningar här på forumet.
Det fungerade inte så perfekt... Det funkar ibland, men inte alla gånger.
Vet någon varför?