26. juli 2002 - 15:55Der er
132 kommentarer og 1 løsning
Indsætte billede og tekst i tabel
Jeg har et script som indsætter et billede(link) og en tekst fra en database. Begge bliver indsat i en tabel, og i den forbindelse har jeg 2 spørgsmål.
1. Kan man lave et eller andet så billedet der bliver indsat får en max. størrelse på f.eks. 300x250 pixels?
2. Hvordan får jeg formatteret den tekststreng fra db'en som skal indsættes i tabellen. Sådan som det virker nu, så får jeg kun skrevet 1 linje i tabellen som svarer til tabellens bredde. Altså ingen linjeskift og resten cuttes bare af?
Set rs = Conn.Execute(strSQL) if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Response.write "<img src=""" & rs("Filstier") & """>" else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det gør dog at nogle biller måske vil se lidt sjove ud. Så skal du finde fil størrelsen enten via en kompunent eller FSO hvis der er JPG og GIF'er. Du skal dog huske at ved at ændre hight og width i image tagen gør ikke at billedet fylder mindre, så det fylder det samme antal bytes.
2. Hvis nu man bruger Large Font så det en længde, small font en anden... Så det bedstre er vel at definere eksvis 30 tegn vises??
Til at finde billede størresle og ændre image tagen så den passer bedst til billet se sidste indlæg i dette spørgsmål: http://www.eksperten.dk/spm/231805
Det prøver jeg lige. Med hensyn til billedernes størelse, så har jeg kigget på din henvisning til spm 231805, og jeg må indrømme, at jeg ikke fatter en meter. Er det noget jeg umiddelbart kan bruge, hvis jeg ændrer stien til billederne, eller skal der laves andre modifikationer?
Hvis du vil havde dine billeder vis i eksvis 300 x 250 og det ikke betyder så meget om billedet bliver trykket eller klemt at se på så kan du ikke bruger spm 231805 til noget. Hvis du har et billede på 1500x500 og klemmer det ned på 300x 250 så kommer det til at se ud som noget har trukket gevaldigt i det. Scriptet ville så ændre det til 300x100, så er det orginale størrelses forhold bibeholdt, det gør så billedet ikke thumbnails størrelse bliver så bredt...
Teksten bliver uploaded til db'en med denne form. Den har virket engang, men nu vil den pludselig ikke mere!! Hvis nu textareaboksen er 20 bred, så laver den jo selv linjeskiftet uden at man trykker på return, men bliver teksten ikke indsat i db'en som en lang tekststreng?
<%Valgt_bil_id = Request.QueryString("bilid") 'Sådan at linket overføre bilID%>
Jo det er lige som text area'et man skriver i her på eksperten. Når man skriver og den selv skrifter ned på næste linie giver det ikke et return når man udskriver i en side. Det er kun ved bruger af retun..
Her er koden den sætter linieskift ind efter max antal tegn, her sat til 30. Hvis et ord er mere end 30 karakter har denne en svaghed så viser den ordet i fuld længde, jeg har et andet stykke kode som sætte en - ind og deler ordet ved de 30 ... men den kode er meget størrer, du må gerne få det men vi kan lige starte med dette.
inputStr = rs("kolonne")
reDim arr(0) str = replace(inputStr,"<br>",vbCrLf) MaxLength = 30 while (LEN(str)>0) splitIndex = InStrRev(str, vbCrLf, MaxLength) if splitIndex = 0 then splitIndex = InStrRev(str, " ", MaxLength) if splitIndex = 0 then splitIndex = LEN(str) end if ReDim Preserve arr(UBOUND(arr) + 1) arr(UBOUND(arr)) = LEFT(str, splitIndex) str = MID(str, splitIndex + 1) wend outStr = "" for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr
Nu får jeg godt nok et linjeskift, dvs. nu får jeg 2 linjer og alt derudover bliver skåret væk. Kan det ikke laves, så man får de linje skift der nu er brug for for at få vist hele tksten?
Jo det skal den. Men den skulle udskrive teksen med return sat ind så der var max 30 karakter pr linie, koden skulle ikke fjerne/udelade tekst tekst fra strengen.
if len("" & rs("Billedtekst")) > 0 then inputStr = rs("Billedtekst") else inputStr = " " 'Sættes til mellemrum for ikke at få fejl i string functionerne end if
Hvis du vil havde dine billeder vis i eksvis 300 x 250 og det ikke betyder så meget om billedet bliver trykket eller klemt at se på så kan du ikke bruger spm 231805 til noget. Hvis du har et billede på 1500x500 og klemmer det ned på 300x 250 så kommer det til at se ud som noget har trukket gevaldigt i det. Scriptet ville så ændre det til 300x100, så er det orginale størrelses forhold bibeholdt, det gør så billedet ikke thumbnails størrelse bliver så bredt...
til db'en, så udskrives kun dette
Hvis du vil havde dine billeder vis i eksvis 300 x
Hele teksten ender godt nok i db'en for hvis jeg prøver at udskrive SQL'en, så er hele teksten med.
Prøv at højre klikke på side og vælg View Source og se om hele teksten er med..
Hvis jeg skriver:
inputStr = "Hvis du vil havde dine billeder vis i eksvis 300 x 250 og det ikke betyder så meget om billedet bliver trykket eller klemt at se på så kan du ikke bruger spm 231805 til noget. Hvis du har et billede på 1500x500 og klemmer det ned på 300x 250 så kommer det til at se ud som noget har trukket gevaldigt i det. Scriptet ville så ændre det til 300x100, så er det orginale størrelses forhold bibeholdt, det gør så billedet ikke thumbnails størrelse bliver så bredt..."
inputStr = "Hvis du vil havde dine billeder vis i eksvis 300 x 250 og det ikke betyder så meget om billedet bliver trykket eller klemt at se på så kan du ikke bruger spm 231805 til noget. Hvis du har et billede på 1500x500 og klemmer det ned på 300x 250 så kommer det til at se ud som noget har trukket gevaldigt i det. Scriptet ville så ændre det til 300x100, så er det orginale størrelses forhold bibeholdt, det gør så billedet ikke thumbnails størrelse bliver så bredt..."
reDim arr(0) str = replace(inputStr,"<br>",vbCrLf) MaxLength = 30 while (LEN(str)>0) splitIndex = InStrRev(str, vbCrLf, MaxLength) if splitIndex = 0 then splitIndex = InStrRev(str, " ", MaxLength) if splitIndex = 0 then splitIndex = LEN(str) end if ReDim Preserve arr(UBOUND(arr) + 1) arr(UBOUND(arr)) = LEFT(str, splitIndex) str = MID(str, splitIndex + 1) wend outStr = "" for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr
Har lige downloaded min db for at tjekke, om hele teksten virkelig var i tabellen. Kunne så konstatere, at kolonnen "Billedtekst" var et tekstfelt, som jo max. kan vise 64 tegn. Har sat den til notat, og teksten vises uden problemer. Men jeg får stadig fejl i de felter, de ikke er tekst i
Skal laves om til dette så man ikke får fejl i tomme linier: if len("" & rs("Billedtekst")) > 0 then inputStr = rs("Billedtekst") else inputStr = " " 'Sættes til mellemrum for ikke at få fejl i string functionerne end if
Jeg havde glemt at slette en linje, så nu virker det. Beklager at jeg ikke noget før fik kigget i db'en så vi kunne have sparet noget tid. Jeg har stadig nogle spørgsmål omkring brugen af FSO, men har lidt svært ved at holde øjnene åbne. Jeg holder spørgsmålet åben til i morgen, så gider du kigge forbi, omend ikke andet så for at få dine point:)
Jeg har kigget på det eks. med FSO du har lavet til Skumbag. Hvad skal jeg gøre for at kunne bruge det ud over at ændre stien til det sted hvor mine billeder ligger. Skal koden sættes ind i et andet script eller hva'. Det jeg har nu er et script med en uploadkomponent som uploader billeder til serveren og smider i link til billederne i db'en. Desuden har jeg jo så et script som henter og viser billederne. Hvad gør jeg så med FSO koden?
Du kan ligge koden i en fil du includer eller hvad koden med i filen...
Dette kode er det som bruges til at finde størrelsen af filen:
<% '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This routine will attempt to identify any filespec passed ::: '::: as a graphic file (regardless of the extension). This will ::: '::: work with BMP, GIF, JPG and PNG files. ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: Based on ideas presented by David Crowell ::: '::: (credit where due) ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah Copyright *c* MM, Mike Shaffer blah blah ::: '::: blah blah ALL RIGHTS RESERVED WORLDWIDE blah blah ::: '::: blah blah Permission is granted to use this code blah blah ::: '::: blah blah in your projects, as long as this blah blah ::: '::: blah blah copyright notice is included blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function gets a specified number of bytes from any ::: '::: file, starting at the offset (base 1) ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: offset => Offset at which to start reading ::: '::: bytes => How many bytes to read ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function GetBytes(flnm, offset, bytes)
Dim objFSO Dim objFTemp Dim objTextStream Dim lngSize
on error resume next
Set objFSO = CreateObject("Scripting.FileSystemObject")
' First, we get the filesize Set objFTemp = objFSO.GetFile(flnm) lngSize = objFTemp.Size set objFTemp = nothing
fsoForReading = 1 Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
if offset > 0 then strBuff = objTextStream.Read(offset - 1) end if
if bytes = -1 then ' Get All!
GetBytes = objTextStream.Read(lngSize) 'ReadAll
else
GetBytes = objTextStream.Read(bytes)
end if
objTextStream.Close set objTextStream = nothing set objFSO = nothing
end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: Functions to convert two bytes to a numeric value (long) ::: '::: (both little-endian and big-endian) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function lngConvert(strTemp) lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256))) end function
function lngConvert2(strTemp) lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256))) end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function does most of the real work. It will attempt ::: '::: to read any file, regardless of the extension, and will ::: '::: identify if it is a graphical image. ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: width => width of image ::: '::: height => height of image ::: '::: depth => color depth (in number of colors) ::: '::: strImageType=> type of image (e.g. GIF, BMP, etc.) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function gfxSpex(flnm, width, height, depth, strImageType)
dim strPNG dim strGIF dim strBMP dim strType strType = "" strImageType = "(unknown)"
Dette kode laver resize på billeder i en folder som er andgivet.:
Set objFSO = CreateObject("Scripting.FileSystemObject") 'Ret stien til den folder du har asp og billerne i Set objF = objFSO.GetFolder("C:\Inetpub\wwwroot\eksperten")
For Each f1 in objFC if instr(ucase(f1.Name), ".GIF") OR instr(ucase(f1.Name), ".JPG") then response.write "<tr><td>Med FSO: " & f1.name & " ... " & f1.path & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then response.write intWidth & " x " & intHigh
'Definer max hight og width du skal så rette det til 300 x 250 maxHigh = 100 maxWidth = 100 fixedHigh = false
'koden som udsreger om det er max hight eller max width som skal bruges if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
Hallo, er du de endnu. Har kigget, ser godt ud. Du bliver nødt til at skære det ud i pap for mig. Er de 2 koder du har vist 1 aspfil, som så skal gemmes i den mappe billederne ligger i? Den vil så resize alle billederne i mappen til den størrelse man angiver i scriptet?
Jeg har lagt det hele i en fil. Den fil viser alle billeder som er i den folder .asp filen ligger i. Ja den vil resize alle billeder.
Her er koden som den er ud:
<html> <head> <title></title> </head> <body>
<% '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This routine will attempt to identify any filespec passed ::: '::: as a graphic file (regardless of the extension). This will ::: '::: work with BMP, GIF, JPG and PNG files. ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: Based on ideas presented by David Crowell ::: '::: (credit where due) ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah Copyright *c* MM, Mike Shaffer blah blah ::: '::: blah blah ALL RIGHTS RESERVED WORLDWIDE blah blah ::: '::: blah blah Permission is granted to use this code blah blah ::: '::: blah blah in your projects, as long as this blah blah ::: '::: blah blah copyright notice is included blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function gets a specified number of bytes from any ::: '::: file, starting at the offset (base 1) ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: offset => Offset at which to start reading ::: '::: bytes => How many bytes to read ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function GetBytes(flnm, offset, bytes)
Dim objFSO Dim objFTemp Dim objTextStream Dim lngSize
on error resume next
Set objFSO = CreateObject("Scripting.FileSystemObject")
' First, we get the filesize Set objFTemp = objFSO.GetFile(flnm) lngSize = objFTemp.Size set objFTemp = nothing
fsoForReading = 1 Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
if offset > 0 then strBuff = objTextStream.Read(offset - 1) end if
if bytes = -1 then ' Get All! GetBytes = objTextStream.Read(lngSize) 'ReadAll else GetBytes = objTextStream.Read(bytes) end if
objTextStream.Close set objTextStream = nothing set objFSO = nothing
end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: Functions to convert two bytes to a numeric value (long) ::: '::: (both little-endian and big-endian) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function lngConvert(strTemp) lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256))) end function
function lngConvert2(strTemp) lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256))) end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function does most of the real work. It will attempt ::: '::: to read any file, regardless of the extension, and will ::: '::: identify if it is a graphical image. ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: width => width of image ::: '::: height => height of image ::: '::: depth => color depth (in number of colors) ::: '::: strImageType=> type of image (e.g. GIF, BMP, etc.) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function gfxSpex(flnm, width, height, depth, strImageType)
dim strPNG dim strGIF dim strBMP dim strType strType = "" strImageType = "(unknown)"
'HER ER KODEN SOM UDSKRIVER ALLE BILLEDE FILE (JPG,GIF) FRA DEN FOLDER ASP FILEN 'LIGGER I '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: Test Harness ::: ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Ret stien til den folder du har asp og billerne i : . = current folder Set objF = objFSO.GetFolder(Server.MapPath("."))
For Each f1 in objFC if instr(ucase(f1.Name), ".GIF") OR instr(ucase(f1.Name), ".JPG") then response.write "<tr><td>Med FSO: " & f1.name & " ... " & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
'Kalder function som returnere størrelsen på billet if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Udskriv billede størrelsen response.write intWidth & " x " & intHigh
'Definer MAX hight og width maxHigh = 250 maxWidth = 300
fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAS hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
Tak skal du have. Jeg tror at mit problem er mere komplekst end lige først antaget. Venter til i morgen med at gå videre med det, så tror jeg bedre at jeg kan formulere mig klart. Håber du kigger forbi! Skal nok spytte lidt flere point i projektet!:)
Jeg har nu prøvet at uploade scriptet til min server. Mappen som billeder og script ligger i hedder "filer". Er det så sådan jeg skal skrive?: 'Ret stien til den folder du har asp og billerne i : . = current folder Set objF = objFSO.GetFolder(Server.MapPath("filer"))
Nu til det, som jeg opgav at formulere i nat! Som før nævnt har jeg et script som via en uploadkomponent uploader billeder til min server og smider et link til billedet i en db. Billederne som bliver uploaded kan have forskellig størrelse Desuden har jeg et script som henter billeder via et id. Det jeg har brug for, er når scriptet henter det rigtige billede ind på siden, så har det en fast størrelse f.eks. 300x250 pixels. Så vidt jeg kan se, se henter, resizer og viser dit script alle billederne i folderen på én gang. Jeg har altså brug for at kunne hente ét bestemt billede, resize det og få det vist på en side!!
Scriptet som jeg bruger til at hente billeder (og tekst) med ser sådan ud:
<%
strSQL = "SELECT Filstier FROM biler WHERE id = " & Request.QueryString("bilid")
Set rs = Conn.Execute(strSQL) if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Response.write "<img src=""" & rs("Filstier") & """>" else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
<% strSQL = "SELECT Billedtekst FROM biler WHERE id = " & Request.QueryString("bilid") Set rs = Conn.Execute(strSQL)
if len("" & rs("Billedtekst")) > 0 then inputStr = rs("Billedtekst") else inputStr = " " 'Sættes til mellemrum for ikke at få fejl i string functionerne end if
reDim arr(0) str = replace(inputStr,"<br>",vbCrLf) MaxLength = 50 while (LEN(str)>0) splitIndex = InStrRev(str, vbCrLf, MaxLength) if splitIndex = 0 then splitIndex = InStrRev(str, " ", MaxLength) if splitIndex = 0 then splitIndex = LEN(str) end if ReDim Preserve arr(UBOUND(arr) + 1) arr(UBOUND(arr)) = LEFT(str, splitIndex) str = MID(str, splitIndex + 1) wend outStr = "" for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr%>
Der 3 function som udgør koden der kan finde højde og brede på et billede det er de 3 jeg har listet navne på her. De 3 function skal du enten havde ind i din kode eller det skal ligge i en include fil.
function GetBytes(flnm, offset, bytes)
function lngConvert(strTemp)
function gfxSpex(flnm, width, height, depth, strImageType)
--------------- Denne linie skal så rettes: 'Billede findes i databasen Response.write "<img src=""" & rs("Filstier") & """>"
Til: Set f1 = objFSO.GetFile(Server.MapPath(rs("Filstier"))) if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Definer MAX hight og width maxHigh = 250 maxWidth = 300 fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAX hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
'Udskriver billede tagen if fixedHigh = true then Response.Write "<img src=""" & (f1.Name) & """ width=""" & Int(intWidth/(intHigh/maxHigh)) & """ hight=""" & maxHigh & """>" else Response.Write "<img src=""" & (f1.Name) & """ width=""" & maxWidth & """ hight=""" & Int(intHigh/(intWidth/maxWidth)) & """>" end if end if
Med hensyn til din sidste kommentar. Du må have lidt tålmodighed med mig da jeg som du jo sikkert forlængst har erfaret ikke er nogen asp-ørn. Jeg har forsået at jeg skal udskifte
Tror alligevel, at jeg har forstået det. Kan du ikke lige vise mig hvordan jeg laver en include fil. Jeg tror at det bliver mest overskueligt på den måde.
Set rs = Conn.Execute(strSQL) if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Definer MAX hight og width maxHigh = 250 maxWidth = 300 fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAX hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
<% strSQL = "SELECT Billedtekst FROM biler WHERE id = " & Request.QueryString("bilid") Set rs = Conn.Execute(strSQL)
if len("" & rs("Billedtekst")) > 0 then inputStr = rs("Billedtekst") else inputStr = " " 'Sættes til mellemrum for ikke at få fejl i string functionerne end if
reDim arr(0) str = replace(inputStr,"<br>",vbCrLf) MaxLength = 50 while (LEN(str)>0) splitIndex = InStrRev(str, vbCrLf, MaxLength) if splitIndex = 0 then splitIndex = InStrRev(str, " ", MaxLength) if splitIndex = 0 then splitIndex = LEN(str) end if ReDim Preserve arr(UBOUND(arr) + 1) arr(UBOUND(arr)) = LEFT(str, splitIndex) str = MID(str, splitIndex + 1) wend outStr = "" for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr%>
<% '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This routine will attempt to identify any filespec passed ::: '::: as a graphic file (regardless of the extension). This will ::: '::: work with BMP, GIF, JPG and PNG files. ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: Based on ideas presented by David Crowell ::: '::: (credit where due) ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah Copyright *c* MM, Mike Shaffer blah blah ::: '::: blah blah ALL RIGHTS RESERVED WORLDWIDE blah blah ::: '::: blah blah Permission is granted to use this code blah blah ::: '::: blah blah in your projects, as long as this blah blah ::: '::: blah blah copyright notice is included blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function gets a specified number of bytes from any ::: '::: file, starting at the offset (base 1) ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: offset => Offset at which to start reading ::: '::: bytes => How many bytes to read ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function GetBytes(flnm, offset, bytes)
Dim objFSO Dim objFTemp Dim objTextStream Dim lngSize
on error resume next
Set objFSO = CreateObject("Scripting.FileSystemObject")
' First, we get the filesize Set objFTemp = objFSO.GetFile(flnm) lngSize = objFTemp.Size set objFTemp = nothing
fsoForReading = 1 Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
if offset > 0 then strBuff = objTextStream.Read(offset - 1) end if
if bytes = -1 then ' Get All! GetBytes = objTextStream.Read(lngSize) 'ReadAll else GetBytes = objTextStream.Read(bytes) end if
objTextStream.Close set objTextStream = nothing set objFSO = nothing
end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: Functions to convert two bytes to a numeric value (long) ::: '::: (both little-endian and big-endian) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function lngConvert(strTemp) lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256))) end function
function lngConvert2(strTemp) lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256))) end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function does most of the real work. It will attempt ::: '::: to read any file, regardless of the extension, and will ::: '::: identify if it is a graphical image. ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: width => width of image ::: '::: height => height of image ::: '::: depth => color depth (in number of colors) ::: '::: strImageType=> type of image (e.g. GIF, BMP, etc.) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function gfxSpex(flnm, width, height, depth, strImageType)
dim strPNG dim strGIF dim strBMP dim strType strType = "" strImageType = "(unknown)"
Så har jeg forklaret det forkert, det som skal ligge i include filen imgsize.asp er de 3 function som udregnet højde og breder. Her er indholdet af include filen som skal hedde imgsize.asp. Jeg har kaldt include filen for imgsize.asp:
<% '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This routine will attempt to identify any filespec passed ::: '::: as a graphic file (regardless of the extension). This will ::: '::: work with BMP, GIF, JPG and PNG files. ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: Based on ideas presented by David Crowell ::: '::: (credit where due) ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah Copyright *c* MM, Mike Shaffer blah blah ::: '::: blah blah ALL RIGHTS RESERVED WORLDWIDE blah blah ::: '::: blah blah Permission is granted to use this code blah blah ::: '::: blah blah in your projects, as long as this blah blah ::: '::: blah blah copyright notice is included blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: '::: blah blah blah blah blah blah blah blah blah blah blah blah ::: ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function gets a specified number of bytes from any ::: '::: file, starting at the offset (base 1) ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: offset => Offset at which to start reading ::: '::: bytes => How many bytes to read ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function GetBytes(flnm, offset, bytes)
Dim objFSO Dim objFTemp Dim objTextStream Dim lngSize
on error resume next
Set objFSO = CreateObject("Scripting.FileSystemObject")
' First, we get the filesize Set objFTemp = objFSO.GetFile(flnm) lngSize = objFTemp.Size set objFTemp = nothing
fsoForReading = 1 Set objTextStream = objFSO.OpenTextFile(flnm, fsoForReading)
if offset > 0 then strBuff = objTextStream.Read(offset - 1) end if
if bytes = -1 then ' Get All! GetBytes = objTextStream.Read(lngSize) 'ReadAll else GetBytes = objTextStream.Read(bytes) end if
objTextStream.Close set objTextStream = nothing set objFSO = nothing
end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: Functions to convert two bytes to a numeric value (long) ::: '::: (both little-endian and big-endian) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function lngConvert(strTemp) lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256))) end function
function lngConvert2(strTemp) lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256))) end function
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '::: ::: '::: This function does most of the real work. It will attempt ::: '::: to read any file, regardless of the extension, and will ::: '::: identify if it is a graphical image. ::: '::: ::: '::: Passed: ::: '::: flnm => Filespec of file to read ::: '::: width => width of image ::: '::: height => height of image ::: '::: depth => color depth (in number of colors) ::: '::: strImageType=> type of image (e.g. GIF, BMP, etc.) ::: '::: ::: '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: function gfxSpex(flnm, width, height, depth, strImageType)
dim strPNG dim strGIF dim strBMP dim strType strType = "" strImageType = "(unknown)"
Det som så skal ligge i din vis.asp er det som du hele tiden har haft, dog skal du ændre der hvor image filen bliver indsat, samt at include filen imgsize som indeholder functionerne til at finde størrelsen på billet:
Set rs = Conn.Execute(strSQL) if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Set f1 = objFSO.GetFile(Server.MapPath(rs("Filstier"))) if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Definer MAX hight og width maxHigh = 250 maxWidth = 300 fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAX hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
'Udskriver billede tagen if fixedHigh = true then Response.Write "<img src=""" & (f1.Name) & """ width=""" & Int(intWidth/(intHigh/maxHigh)) & """ hight=""" & maxHigh & """>" else Response.Write "<img src=""" & (f1.Name) & """ width=""" & maxWidth & """ hight=""" & Int(intHigh/(intWidth/maxWidth)) & """>" end if end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
Der er en filsti i kolonnen. Jeg opdager lige, at det kun er de poster, som inheholder et billede som udskriver "Der er desværre intet billede af bilen" De poster som ikke indeholder billede udskriver intet. Kan du huske, at min database ikke ligger på samme server som billederne? Kan det være problemet?
no_doubt>> Det er en dato'en som kan findes med FSO, jeg usrkiver denne linie: response.write "<tr><td>Med FSO: " & f1.name & " ... " & "</td><td>" & f1.DateCreated & "</td><td>" & f1.Size & "</td><td>"
Da det vare dette som udskrev billedet virkede det??
if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Response.write "<img src=""" & rs("Filstier") & """>" else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if
strSQL = "SELECT Filstier FROM biler WHERE id = " & Request.QueryString("bilid")
' Databaseforbindelse ConnString = "DSN=riishojwebsoftdkdsn" Set Conn = Server.CreateObject("ADODB.Connection") Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Conn.Open ConnString
Set rs = Conn.Execute(strSQL) if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Set f1 = objFSO.GetFile(Server.MapPath(rs("Filstier")))
if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Definer MAX hight og width maxHigh = 250 maxWidth = 300 fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAX hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
<% strSQL = "SELECT Billedtekst FROM biler WHERE id = " & Request.QueryString("bilid") Set rs = Conn.Execute(strSQL)
if len("" & rs("Billedtekst")) > 0 then inputStr = rs("Billedtekst") else inputStr = " " 'Sættes til mellemrum for ikke at få fejl i string functionerne end if
reDim arr(0) str = replace(inputStr,"<br>",vbCrLf) MaxLength = 50 while (LEN(str)>0) splitIndex = InStrRev(str, vbCrLf, MaxLength) if splitIndex = 0 then splitIndex = InStrRev(str, " ", MaxLength) if splitIndex = 0 then splitIndex = LEN(str) end if ReDim Preserve arr(UBOUND(arr) + 1) arr(UBOUND(arr)) = LEFT(str, splitIndex) str = MID(str, splitIndex + 1) wend outStr = "" for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next End if outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr%> </td> </tr> </table>
if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Set f1 = objFSO.GetFile(Server.MapPath(rs("Filstier"))) if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Definer MAX hight og width maxHigh = 250 maxWidth = 300 fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAX hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
'Udskriver billede tagen if fixedHigh = true then Response.Write "<img src=""" & (f1.Name) & """ width=""" & Int(intWidth/(intHigh/maxHigh)) & """ hight=""" & maxHigh & """>" else Response.Write "<img src=""" & (f1.Name) & """ width=""" & maxWidth & """ hight=""" & Int(intHigh/(intWidth/maxWidth)) & """>" end if end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if
Jeps det bliver i morgen aften.. jeg skal på arbejde i mogen så er ferien slut :( Jeg kan også vise mit script som jeg har brugt som jeg kan få til at virke.
nu kan jeg også se hvor Expected end og statement kommer fra...
for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next End if '<------------------ HER den skal fjerne outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr
Du havde fået denne if if Len("" & rs("Filstier")) > 0 then til at slutte helt nede det det script som udskriv beskeden så derfor var siden tom hvis der ikke var noget billed...
strSQL = "SELECT Filstier FROM biler WHERE id = " & Request.QueryString("bilid")
' Databaseforbindelse ConnString = "DSN=riishojwebsoftdkdsn" Set Conn = Server.CreateObject("ADODB.Connection") Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Conn.Open ConnString
Set rs = Conn.Execute(strSQL)
if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Set f1 = objFSO.GetFile(Server.MapPath(rs("Filstier"))) if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Definer MAX hight og width maxHigh = 250 maxWidth = 300 fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAX hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
'Udskriver billede tagen if fixedHigh = true then Response.Write "<img src=""" & (f1.Name) & """ width=""" & Int(intWidth/(intHigh/maxHigh)) & """ hight=""" & maxHigh & """>" else Response.Write "<img src=""" & (f1.Name) & """ width=""" & maxWidth & """ hight=""" & Int(intHigh/(intWidth/maxWidth)) & """>" end if end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
<% strSQL = "SELECT Billedtekst FROM biler WHERE id = " & Request.QueryString("bilid") Set rs = Conn.Execute(strSQL)
'Response.write rs("Billedtekst") &"" if len("" & rs("Billedtekst")) > 0 then inputStr = rs("Billedtekst") else inputStr = " " 'Sættes til mellemrum for ikke at få fejl i string functionerne end if
reDim arr(0) str = replace(inputStr,"<br>",vbCrLf) MaxLength = 50 while (LEN(str)>0) splitIndex = InStrRev(str, vbCrLf, MaxLength) if splitIndex = 0 then splitIndex = InStrRev(str, " ", MaxLength) if splitIndex = 0 then splitIndex = LEN(str) end if ReDim Preserve arr(UBOUND(arr) + 1) arr(UBOUND(arr)) = LEFT(str, splitIndex) str = MID(str, splitIndex + 1) wend outStr = "" for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr
Kommunikationen blev lidt rodet i aftes. Jeg har prøvet dit sidste forslag. Alt virker som det skal med én undtagelse... Der bliver ikke vist noget billede:( Har kun lige kigget på det i morges med søvn i øjnene, og nu er asp-understøttelsen på min server gået ned!!! Har tæppebombet support uden resultat, så lige nu er jeg ikke i stand til at teste noget som helst. Men som sagt, scriptet kan stadig ikke få fat i billederne.
Ja, virker min server igen. Jeg har kigget efter image tag'en i view source og må konstatere, at der ikke er nogen. Jeg paster lige en af siderne, så du kan se hvad den skriver. Til denne side er der et billede med stien /upload/filer/image1.jpg i databasen. Det ser sådan ud, når siden vises.
<br>Her er koden den sætter linieskift ind efter max <br>antal tegn, her sat til 30. Hvis et ord er mere <br>end 30 karakter har denne en svaghed så viser den <br>ordet i fuld længde, jeg har et andet stykke kode <br>som sætte en - ind og deler ordet ved de 30 ... <br>men den kode er meget størrer, du må gerne få det <br>men vi kan lige starte med dette. <br><br><br><br> </td> </tr> </table>
end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
Til: else 'kunne ikke finde billet Response.write "Billedet kunne ikke findes" end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %>
Så kan man altså ikke åbne filen og læse størrelsen, men man kan godt vise den på en side..
Fejlen kommer fordi f1 ikke er defienret efter den linie er udkommenteret. Det var bare for test. Det vil sige at man ikke kan finde størrelsen på filen hvis filerne ligger hvor de ligger.
Tror du ikke det kan have noget at gøre med at stien til billederne i databasen heder /upload/filer/, mens stien til billederne som uploadkomponenten uploader til serveren hedder /home/sites/site122/web/upload/filer/
Jeg har spurgt support på mit webhotel hvorfor FSO ikke virker og fået svaret
Ser ud til at server stien til billedet er forkert. Ved ikke hvad i skriver men ved i ikke kan bruge ../ for at gå en mappe tilbage.
Måske men hvis billedet bliver uploaded til den rigtige folder og du kan ved at gemme stien i Database (/upload/filer/) få vist billedet ved normal HTML kode, så tror jeg stierne passer.
Jeg prøver lige noget på min localhost mht. / stier ...
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open ConnString 'Conn.Open "Provider=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE="&Server.MapPath("db1.mdb")
Set rs = Conn.Execute(strSQL)
if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Set f1 = objFSO.GetFile(Server.MapPath(rs("Filstier"))) if gfxSpex(server.MapPath(f1.Name), intWidth, intHigh, intColor, strType) = true then 'Definer MAX hight og width maxHigh = 250 maxWidth = 300 fixedHigh = false
'Kode som udregner hight og width ud fra billede størrelese og MAX hight og width if (intWidth > maxWidth) AND (intHigh > maxHigh) then if (intWidth/maxWidth) < (intHigh/maxHigh) then fixedHigh = true end if elseif (intHigh > maxHigh) then fixedHigh = true elseif (intHigh > intWidth) then fixedHigh = true end if
'Udskriver billede tagen if fixedHigh = true then Response.Write "<img src=""" & (f1.Name) & """ width=""" & Int(intWidth/(intHigh/maxHigh)) & """ hight=""" & maxHigh & """>" else Response.Write "<img src=""" & (f1.Name) & """ width=""" & maxWidth & """ hight=""" & Int(intHigh/(intWidth/maxWidth)) & """>" end if else Response.write "Billedet kunne ikke findes: " & server.MapPath(f1.Name) end if else 'Ingen billede vis default billede Response.write "Der er desværre intet billede af bilen" end if %> </td> </tr> </table>
<table border="0" cellpadding="0" cellspacing="0" width="300" align="center"> <tr> <td bgcolor="#FFFFFF" align="center" style="border: 1 solid #000000"><br> <p> <% strSQL = "SELECT Billedtekst FROM biler WHERE id = " & Request.QueryString("bilid") Set rs = Conn.Execute(strSQL)
'Response.write rs("Billedtekst") &"" if len("" & rs("Billedtekst")) > 0 then inputStr = rs("Billedtekst") else inputStr = " " 'Sættes til mellemrum for ikke at få fejl i string functionerne end if
reDim arr(0) str = replace(inputStr,"<br>",vbCrLf) MaxLength = 50 while (LEN(str)>0) splitIndex = InStrRev(str, vbCrLf, MaxLength) if splitIndex = 0 then splitIndex = InStrRev(str, " ", MaxLength) if splitIndex = 0 then splitIndex = LEN(str) end if ReDim Preserve arr(UBOUND(arr) + 1) arr(UBOUND(arr)) = LEFT(str, splitIndex) str = MID(str, splitIndex + 1) wend outStr = "" for i = LBound(arr) to UBound(arr) outStr = outStr & arr(i) & vbCrLf next outStr = replace (outStr, vbCrLf, "<br>") Response.Write outStr %> </td> </tr> </table>
Bingo!!! Så var den der. 1000 tak for din kæmpe indsats. Jeg kiggede lige og kunne se, at der har været 126 indlæg på spørgsmålet. Fatter ikke, at du kan finde ud af al der her, og at du har tålmodighed til at fortsætte. Send lige et svar så du kan få point. Jeg synes, at du skal have 150.
Plejer der ikke at være en knap, så man kan tildele flere point end de som spørgsmålet er oprettet i? Hvis ikke så opretter jeg lige et spørgsmål med point til dig!
hmm det kunne man ellers for noget tid siden, ja der bliver jo lavet lidt om en gang i mellem.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.