Avatar billede runskee Nybegynder
24. august 2005 - 09:44 Der er 67 kommentarer og
1 løsning

visning af billeder fra mappe - med frem/tilbage knap

Jeg vil gerne vise billeder (enkeltvis) fra en mappe. Ikke med thumbnail - bare frem/tilbage knap. Er der nogen der har lidt kode til det? Så simpelt som muligt...
Avatar billede softspot Forsker
24. august 2005 - 11:22 #1
Har lige flikket dette script sammen. Det opbygger et array på klienten med navne på de billeder de ligger i folderen (500 max, men det kan du selv lave om). Scriptet timer ud efter 4 minutter, men det kan du ogsp selv lave om :)


<%@ language="vbscript" %>
<%
Server.ScriptTimeout = 240

dim stiTilDineBilleder: stiTilDineBilleder = "/images/"

sub genArray(path)
  dim cnt: cnt = 0

  set fso = server.createobject("Scripting.FileSystemObject")
 
  path = server.MapPath(path)
  if right(path,1) <> "\" then
    path = path + "\"
  end if

  set folder = fso.GetFolder(path)

  response.write "var files = ["
  for each f in folder.files
    if lcase(right(f.name,3)) = "jpg" then
      if cnt > 0 then
        response.write ","
      end if
      response.write "'" & f.name & "'"
      cnt = cnt + 1
    end if
    if cnt > 500 then
      exit for
    end if
  next
  response.write "];"
end sub
%>
<html>
<head>
<title>image view</title>
<script type="text/javascript">
var idx = 0;
<% genArray(stiTilDineBilleder) %>

function showImage(moveDir)
{
  if((idx > 0 && moveDir < 0) || (idx < files.length && moveDir > 0))
  {
    idx += moveDir;

    var objImg = document.getElementById('bigImage');
    if(objImg)
    {
        objImg.src = "<%=stiTilDineBilleder%>" + files[idx];
    }
  }
}
</script>
</head>
<body>
  <a href="java script:void(showImage(-1))">tilbage</a>
  <a href="java script:void(showImage(1))">frem</a><br>
  <img src="" id="bigImage" height="80%"><br>
  <a href="java script:void(showImage(-1))">tilbage</a>
  <a href="java script:void(showImage(1))">frem</a>
</body>
</html>
Avatar billede runskee Nybegynder
24. august 2005 - 17:30 #2
Jeg får fejl her:

set folder = fso.GetFolder(path)


Er det noget med min path?:

dim stiTilDineBilleder: stiTilDineBilleder ="/fotos/"
Avatar billede softspot Forsker
24. august 2005 - 17:49 #3
Prøv at indsætte

Response.Write("' Path er : " & path & vbCrLf)
Response.End

på linien lige før

set folder = fso.GetFolder(path).

Hvad melder den at stien er (du skal nok "view source" for at se det)?
Avatar billede softspot Forsker
24. august 2005 - 17:51 #4
...og da det er i en javascript-sektion teksten indsættes skal du jo nok bruge denne kode i stedet:

Response.Write("// Path er : " & path & vbCrLf)
Exit Sub

Jeg ændrede til Exit Sub for at få siden genereret færdig...
Avatar billede runskee Nybegynder
24. august 2005 - 18:07 #5
Den lyder meget mærkelig:

/customers/mettesteincke.com/mettesteincke.com/httpd.www/fotos\

stien skal være:

www.mettesteincke.com/premila/fotos/
Avatar billede softspot Forsker
24. august 2005 - 18:11 #6
Hmmm... det lader til at Server.MapPath fungerer på en anden måde på din server end den gør på min...? Kører du IIS på en Windows Server eller er det en anden udgave af asp (f.eks. Chili!ASP?
Avatar billede runskee Nybegynder
24. august 2005 - 18:15 #7
filerne ligger på en b-one server, hvis det hjælper dig..
Avatar billede softspot Forsker
24. august 2005 - 18:16 #8
Det kan dog muligvis ordnes således:

path = server.MapPath(path)

if instr(path,"\") > 0 then
  pathSep = "\"
elseif instr(path,"/") then
  pathSep = "/"
else
  ' default til Windows style sti adskiller
  pathSep = "\"
end if

if right(path,1) <> pathSep then
  path = path + pathSep
end if
Avatar billede softspot Forsker
24. august 2005 - 18:17 #9
Jeg har en mistanke om at b-one tilbyder begge servertyper, så det bringer mig ikke nærmere et svar... men prøv lige at indsætte det kode jeg postede til sidst.
Avatar billede softspot Forsker
24. august 2005 - 18:19 #10
Ok, det lader til at b-one tilbyder apache med chili!ASP. Jeg håber alligevel min rettelse fungerer for dig.
Avatar billede runskee Nybegynder
24. august 2005 - 18:19 #11
Det har jeg prøvet nu... jeg får den samme sti
Avatar billede softspot Forsker
24. august 2005 - 18:22 #12
Ja, ok, min fejl. Du skal lige fjerne den der debug-kode igen, så rutinen kommer tilbage i funktionel tilstand :)
Avatar billede softspot Forsker
24. august 2005 - 18:23 #13
Men hov! Er der stadig en backslash i enden af strengen eller er det blevet til en alm. skråstreg?
Avatar billede runskee Nybegynder
24. august 2005 - 18:27 #14
Det er stadig det samme
Avatar billede softspot Forsker
24. august 2005 - 18:32 #15
stien eller fejlen?
Avatar billede softspot Forsker
24. august 2005 - 18:32 #16
Hvad er ordlyden af fejlen egentlig?
Avatar billede runskee Nybegynder
24. august 2005 - 18:36 #17
Det er stadig en backslash. Ergo samme sti og samme fejl
Avatar billede runskee Nybegynder
24. august 2005 - 18:37 #18
Error Type:
Sun ONE ASP VBScript runtime (0x800A004C)
Path not found
/premila/test.asp, line 20
Avatar billede softspot Forsker
24. august 2005 - 18:41 #19
Og du har indsat den kodestump jeg postede 24/08-2005 18:16:10???

Hmmm... der er vist et eller andet ved Chili!ASP som er forskelligt fra MS ASP/VBScript. Skal lige have kigget i referencedok. til Chili!ASP...
Avatar billede runskee Nybegynder
24. august 2005 - 18:45 #20
Jeg har prøvet lidt af hvert.. Jeg satte lige den kode ind igen og min sti slutter her med en alm. skråstreg...
Avatar billede softspot Forsker
24. august 2005 - 19:14 #21
...men selvom den slutter med skråstreg (altså ser sådan ud: "/customers/mettesteincke.com/mettesteincke.com/httpd.www/fotos/"), så får du stadig fejlen i linien:

set folder = fso.GetFolder(path)

eller hvad?
Avatar billede runskee Nybegynder
24. august 2005 - 19:20 #22
jep
Avatar billede softspot Forsker
24. august 2005 - 20:30 #23
OK, jeg er lidt lost her, for det lader til at FSO ikke accepterer den sti, selvom den ser fin nok ud. Jeg har lige et sidste foreslag inden jeg skal i seriøs tænkeboks, nemlig at undlade det kode som paster en skåstreg efter stien hvis den ikke allerede er der.

Altså prøv at fjerne denne kode (taget fra det oprindelige forslag postet 24/08-2005 11:22:23):

if right(path,1) <> "\" then
  path = path + "\"
end if
Avatar billede runskee Nybegynder
24. august 2005 - 21:52 #24
Jeg får stadig den samme fejl
Avatar billede softspot Forsker
24. august 2005 - 22:04 #25
Kan du ikke prøve at lave nogle tests (på en "blank" side) hvor du prøve at finde ud af hvilket format på stien man skal bruge sammen med fso.GetFolder for at den vil acceptere det, for jeg har ikke umiddelbart selv adgang til b-one...?

Hvis du finde ud af det, så burde det være overkommeligt at komme videre...
Avatar billede runskee Nybegynder
24. august 2005 - 22:35 #26
hvilke test mener du jeg skal prøve - har du nogle bestemte kode-forslag??
Avatar billede softspot Forsker
24. august 2005 - 22:46 #27
Prøv f.eks.

on error resume next
set fso = Server.CreateObject("Scripting.FileSystemObject")

response.write("Henter folder / - ")
set f = fso.GetFolder(Server.MapPath("/"))
if err.number <> 0 then
  response.write("Fejl i Server.MapPath(""/""): " & err.description & "<br>")
  err.clear
else
  response.write("OK<br>")
end if

response.write("Henter folder . - ")
set f = fso.GetFolder(Server.MapPath("."))
if err.number <> 0 then
  response.write("Fejl i Server.MapPath("".""): " & err.description & "<br>")
  err.clear
else
  response.write("OK<br>")
end if

response.write("Henter folder .. - ")
set f = fso.GetFolder(Server.MapPath(".."))
if err.number <> 0 then
  response.write("Fejl i Server.MapPath(""..""): " & err.description & "<br>")
  err.clear
else
  response.write("OK<br>")
end if

response.write("Henter folder ./ - ")
set f = fso.GetFolder(Server.MapPath("./"))
if err.number <> 0 then
  response.write("Fejl i Server.MapPath(""./""): " & err.description & "<br>")
  err.clear
else
  response.write("OK<br>")
end if
Avatar billede softspot Forsker
25. august 2005 - 00:01 #28
Kom du videre med det?
Avatar billede runskee Nybegynder
25. august 2005 - 06:56 #29
Ja, jeg gik lige væk fra det i går. Men jeg får ok i alle fire tests, hvis det var det det gik ud på..
Avatar billede softspot Forsker
25. august 2005 - 11:42 #30
Liiige en sidste ting: er navnet på din folder rent faktisk "fotos" eller er det "Fotos" eller noget andet, for på en linux er det jo case-sensitiv.
Avatar billede runskee Nybegynder
25. august 2005 - 16:03 #31
He he. Ja hvis det dog bare havde været så let...
Avatar billede softspot Forsker
25. august 2005 - 16:09 #32
Ja, men man kunne aldrig vide - det var ikke en af de ting jeg overvejede først... :|

Så har jeg foreløbige afsluttende bemærkninger (dels som svar på dit forrige post, dels som konstatering):

Jeg var interesseret i at teste
1. om den accepterede mappath på root path
2. om den accepterede mappath på current path
3. om den accepterede mappath på parent path
4. om den accepterede mappath på current path med slash (? hmm.. har muligvis været træt... :/)
5. hvilke adresse den kom frem til i de 4 tests

Hvis de stier ligner den første du fik frem, så er der jo nok ikke meget at komme efter der. I dette tilfælde er jeg lidt blank hvad angår virkemåden at fso.GetFolder på en Linux version af Chili!ASP, så det kan være der er en anden som kan hjælpe dig med det - jeg har som sagt ingen erfaring med den platform.

Jeg ved ikke om man kunne få mere information med fso.GetDrive og muligvis skal bruge det sammen med MapPath for at få den fulde sti til det man vil have, men det vil bare blive skud fra min side, så det er du vist ikke særlig tjent med.

Jeg har dog selv fået lidt glæde at ovenstående script (da det fungerer upåklageligt på en IIS), så om ikke for andet... :|
Avatar billede runskee Nybegynder
25. august 2005 - 16:32 #33
Kan det passe at de kommer til at se sådan ud. Jeg kørte dem igennem enkeltvis:

1. /customers/mettesteincke.com/mettesteincke.com/httpd.www
2. /customers/mettesteincke.com/mettesteincke.com/httpd.www/premila
3. /customers/mettesteincke.com/mettesteincke.com/httpd.www
4. /customers/mettesteincke.com/mettesteincke.com/httpd.www/premila
Avatar billede runskee Nybegynder
25. august 2005 - 16:34 #34
Den samlede test jeg kørte i morgen så sådan ud:

Henter folder / - OK
Henter folder . - OK
Henter folder .. - OK
Henter folder ./ - OK
Avatar billede softspot Forsker
25. august 2005 - 16:40 #35
Og du siger at du prøvede at fjerne koden der paster en skråstreg efter stien? Sådan her:

<%@ language="vbscript" %>
<%
Server.ScriptTimeout = 240

dim stiTilDineBilleder: stiTilDineBilleder = "/images/"

sub genArray(path)
  dim cnt: cnt = 0

  set fso = server.createobject("Scripting.FileSystemObject")
 
  path = server.MapPath(path)

  set fldr = fso.GetFolder(path)

  response.write "var files = ["
  for each f in fldr.files
    if lcase(right(f.name,3)) = "jpg" then
      if cnt > 0 then
        response.write ","
      end if
      response.write "'" & f.name & "'"
      cnt = cnt + 1
    end if
    if cnt > 500 then
      exit for
    end if
  next
  response.write "];"
end sub
%>
<html>
<head>
<title>image view</title>
<script type="text/javascript">
var idx = 0;
<% genArray(stiTilDineBilleder) %>

function showImage(moveDir)
{
  if((idx > 0 && moveDir < 0) || (idx < files.length && moveDir > 0))
  {
    idx += moveDir;

    var objImg = document.getElementById('bigImage');
    if(objImg)
    {
        objImg.src = "<%=stiTilDineBilleder%>" + files[idx];
    }
  }
}
</script>
</head>
<body>
  <a href="java script:void(showImage(-1))">tilbage</a>
  <a href="java script:void(showImage(1))">frem</a><br>
  <img src="" id="bigImage" height="80%"><br>
  <a href="java script:void(showImage(-1))">tilbage</a>
  <a href="java script:void(showImage(1))">frem</a>
</body>
</html>
Avatar billede runskee Nybegynder
25. august 2005 - 16:46 #36
ja
Avatar billede softspot Forsker
25. august 2005 - 17:00 #37
Der er altså noget helt galt hvis den kan finde og læse folderen

/customers/mettesteincke.com/mettesteincke.com/httpd.www/premila

men den ikke kan finde og læse folderen

/customers/mettesteincke.com/mettesteincke.com/httpd.www/fotos

Har den anonyme bruger adgang til fotos-folderen?
Avatar billede runskee Nybegynder
25. august 2005 - 17:01 #38
Lad mig lige forstå. Er det stien:

/customers/mettesteincke.com/mettesteincke.com/httpd.www/

Som er helt forkert?
Avatar billede runskee Nybegynder
25. august 2005 - 17:06 #39
hov vi overlappede lige..

Der er ikke noget som hedder:
/customers/mettesteincke.com/mettesteincke.com/httpd.www/fotos

Det er en undermappe der hedder:
premila/fotos
Avatar billede softspot Forsker
25. august 2005 - 17:09 #40
OH MY GOD!

Jamen, i så fald så skal flg. linie:

dim stiTilDineBilleder: stiTilDineBilleder ="/fotos/"

jo se sådan ud:

dim stiTilDineBilleder: stiTilDineBilleder ="/premila/fotos/"
Avatar billede runskee Nybegynder
25. august 2005 - 17:19 #41
Det havde jeg rettet.
Avatar billede softspot Forsker
25. august 2005 - 17:31 #42
OK, så er jeg tilbage ved min forrige kommentar om at jeg ikke fatter noget at det hele...?!?

Hvad kommer der ud af at køre

Server.MapPath("fotos")

?
Avatar billede softspot Forsker
25. august 2005 - 17:32 #43
og

set f = fso.GetFolder(Server.MapPath("fotos"))
Avatar billede runskee Nybegynder
25. august 2005 - 17:41 #44
lige en indskydelse:

Jeg kan se i "vi kilde" at den lister alle de filer som findes i "/premila/fotos/". Så på en eller anden måde har den jo fundet mappen:

var files = ['10_250.jpg','11_250.jpg','12_250.jpg','13_250.jpg'.....osv
Avatar billede softspot Forsker
25. august 2005 - 17:48 #45
Betyder det så at du rent faktisk får en side at se og at det ikke er en server-fejl du får?

Hvad er problemet egentlig lige i øjeblikket?
Avatar billede runskee Nybegynder
25. august 2005 - 17:54 #46
ja, jeg er også selv lidt forvirret nu... Det er ikke en serverfejl mere. Du kan selv se her:

http://www.mettesteincke.com/premila/test5.asp
Avatar billede softspot Forsker
25. august 2005 - 18:05 #47
OK - godt så! :)

så skal du bare ændre koden (på klientsiden) i script-blokken til at se således ud:

<script type="text/javascript">
var idx = 0;
<% genArray(stiTilDineBilleder) %>

function showImage(moveDir)
{
  if((idx > 0 && moveDir < 0) || (idx < files.length && moveDir > 0))
  {
    idx += moveDir;
  }

  var objImg = document.getElementById('bigImage');
  if(objImg)
  {
    objImg.src = "<%=stiTilDineBilleder%>" + files[idx];
  }
}
window.onload = function() { showImage(0); }
</script>
Avatar billede softspot Forsker
25. august 2005 - 18:06 #48
Ups! der mangler jo lige en skråstreng inden files[idx]

<script type="text/javascript">
var idx = 0;
<% genArray(stiTilDineBilleder) %>

function showImage(moveDir)
{
  if((idx > 0 && moveDir < 0) || (idx < files.length && moveDir > 0))
  {
    idx += moveDir;
  }

  var objImg = document.getElementById('bigImage');
  if(objImg)
  {
    objImg.src = "<%=stiTilDineBilleder%>/" + files[idx];
  }
}
window.onload = function() { showImage(0); }
</script>
Avatar billede runskee Nybegynder
25. august 2005 - 18:11 #49
Ja, den havde jeg også set. Og prøvede både med og uden, da jeg ikke var helt sikker... Men samme resultat.
Avatar billede runskee Nybegynder
25. august 2005 - 18:13 #50
Hvis stien er rigtig burde jeg så ikke kunne se mine fotos manuelt. Som fx:

http:///customers/mettesteincke.com/mettesteincke.com/httpd.www/premila/fotos/2_250.jpg

Men det kan jeg ikke?
Avatar billede softspot Forsker
25. august 2005 - 18:20 #51
Nej, faktisk skal det være den virtuelle sti du bruger på klienten, fordi den jo ikke skulle kunne få fat i filer der ligger udenfor websitet på din server. Derfor skal den sti der står foran files[idx] være den relative sti, som jeg har forstået i dit tilfælde /premila/fotos/. Det er derfor at stiTilDineBilleder som udgangspunkt er den virtuelle sti og det er fordi FileSystemObject's arbejder med absolutte stier, at den virtuelle sti skal laves om med Server.MapPath på serveren (da Server.MapPath giver den absolutte sti ud fra en virtuel sti).
Avatar billede softspot Forsker
25. august 2005 - 22:41 #52
Kom du videre med det?
Avatar billede runskee Nybegynder
26. august 2005 - 07:43 #53
jeg kommer ikke rigtig frem til noget...
Avatar billede runskee Nybegynder
26. august 2005 - 07:45 #54
Der findes ikke en helt anden tilgang?
Avatar billede softspot Forsker
26. august 2005 - 11:40 #55
Det gør der givetvis, men jeg fornemmer at vi er tæt på nu, så kan du ikke lige prøve dette kode inden vi helt giver op (udskift den gamle funktion ved samme navn med denne udgave):

function showImage(moveDir)
{
  if((idx > 0 && moveDir < 0) || (idx < files.length && moveDir > 0))
  {
    idx += moveDir;
  }

  var objImg = document.getElementById('bigImage');
  if(objImg)
  {
    objImg.src = "/premila/fotos/" + files[idx];
  }
}

Det er en hardcoded sti til dine billeder. Det må sq snart virke det her, det er så tæt på! :)
Avatar billede softspot Forsker
26. august 2005 - 11:50 #56
Jeg kan se det fungerer nu :)
Avatar billede runskee Nybegynder
26. august 2005 - 11:51 #57
kan du sige bingo :-)
Avatar billede runskee Nybegynder
26. august 2005 - 11:52 #58
Fedt... 1000 tak
Avatar billede softspot Forsker
26. august 2005 - 11:52 #59
Ja! :D

Du skal nok lige skifte din funktion ud med denne (der er lige et problem med det sidste billede):

function showImage(moveDir)
{
  if((idx > 0 && moveDir < 0) || (idx < files.length - 1 && moveDir > 0))
  {
    idx += moveDir;
  }

  var objImg = document.getElementById('bigImage');
  if(objImg)
  {
    objImg.src = "/premila/fotos/" + files[idx];
  }
}
Avatar billede softspot Forsker
26. august 2005 - 11:57 #60
Tak for point :)
Avatar billede runskee Nybegynder
26. august 2005 - 12:38 #61
Når jeg rykker koden ind i síne oprindelige omgivelser (hjemmen under konstruktion) viser den ikke det første billede. Man skal trykke frem for at få et billede op. Har du noget idé om hvad det skyldes??
Avatar billede runskee Nybegynder
26. august 2005 - 12:40 #62
Det virker dog når jeg fjerner et par dreamweaver mouseovers...
Avatar billede softspot Forsker
26. august 2005 - 12:41 #63
Der skal være en linie i klientscriptet

window.onload = function() { showImage(0); }

Er den der stadig...?

Den sørger for at vise det første billede når siden er indlæst...
Avatar billede softspot Forsker
26. august 2005 - 12:43 #64
Det kan være at DreamWeaver overskriver window.onload-funktionen... den er jeg ikke så meget inde i, desværre (jeg foretrækker Visual Studio).
Avatar billede runskee Nybegynder
26. august 2005 - 13:15 #65
Det er da lidt mystisk at det ikke virker
Avatar billede softspot Forsker
26. august 2005 - 17:30 #66
Kan du ikke finde nogen steder i din kode hvor window.onload (eller <body onload=""...) bliver sat?
Avatar billede runskee Nybegynder
26. august 2005 - 18:55 #67
Nej det er der ingen steder, men jeg lavede bare roll over uden om dreamweaver. Så det virker nu.
Avatar billede minoo Nybegynder
18. januar 2006 - 13:01 #68
Kan kun få et foto til at virke hvorfor
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester