Avatar billede weis Nybegynder
13. august 2007 - 14:29 Der er 13 kommentarer og
1 løsning

ASPImage viser ikke det nyeste billed

Jeg har en funktion som tilføjer en tekst til et billed som allerede ligger på serveren, og teksten ændre sig gang på gang (5 tilfældige bogstaver) og så vises billedet lige efter det er lavet, det virker godt nok hvis man ikke har besøgt siden før for første gang vises billedet rigtigt, men hvis man ikke lukker browseren og besøger siden senere, så er det det samme billed den viser men det billed der liger på serveren har ændret sig og de 5 bogstaver passer ikke længere:

<% imgPath = "d:/web/localuser/domain.dk/img/"
     
      Set Image = Server.CreateObject("AspImage.Image")
        Image.LoadImage(imgPath & "mit.jpg")

        Image.FontColor = RGB(29, 67, 136)
        Image.Italic = True
        Image.Bold = True
        Image.FontName = "Arial"
        Image.FontSize = 14
        Image.PadSize = 2
       
        strMessage = "min tekst"
        Image.MaxX = Image.TextWidth (strMessage)
        Image.MaxY = Image.TextHeight (strMessage)

          Image.TextOut strMessage, Image.X, Image.Y, false

      Image.FileName = imgPath & "msg1.jpg"
Image.SaveImage

response.write "<img src='msg1.jpg'>" %>
Avatar billede w13 Novice
13. august 2007 - 14:43 #1
Hvordan har billedet ændret sig og hvad mener du med, at de 5 bogstaver ikke længere passer?

Kunne det tænkes, du skal ud i at rode med noget cache eller Response.Expires=-1?
Avatar billede weis Nybegynder
13. august 2007 - 14:59 #2
det er fordi jeg har forsøgt mig med at lave en "primitiv" sikring af en tagwall så man skal skrive en 5 cifret kode, som laves tilfældigt med dette:

Function word(keySize)
  chars = "aAbBcCdDeEfFgGhHijJkKLmMnNopPqQrRsStTuUvVwWxXyYzZ1234567890"
  strKey = ""    
  randomize
  for i = 1 to keySize
    index = Int(rnd * len(chars))+1
    strKey = strKey & Mid(chars,index,1)
  next
  word = strKey
End Function

når man går ind på siden, og de 5 cifre laves så om til et billed, men jeg skal refresh siden før det er det rigtige billed der kommer frem!
Avatar billede w13 Novice
13. august 2007 - 15:05 #3
Har du sat en <%Response.Expires=-1%> på dit dokument?
Avatar billede weis Nybegynder
13. august 2007 - 15:13 #4
nej men jeg har:

<%
Response.Expires = 0
Response.ExpiresAbsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"

Response.Buffer = True
%>

fordi det er i et brugersystem! og jeg kan se at det er generelt for når jeg fx. uploader et andet profil billed end det jeg har, så skal jeg også opdater browseren for at det ændre sig!
Avatar billede weis Nybegynder
13. august 2007 - 15:37 #5
kan det have noget og gør med, at alle mine sider bliver åbnet ved <% Server.Execute %> inde i en default.asp side?
Avatar billede w13 Novice
13. august 2007 - 16:40 #6
Det ved jeg ikke lige umiddelbart, om det kan. Skriver du:

Response.Expires = 0
Response.ExpiresAbsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"

på begge sider (altså både default og den inkluderede) eller hvilke?
Avatar billede weis Nybegynder
13. august 2007 - 16:54 #7
nej det er sådan at det står i en fil, som includes på alle de sider som bliver "Server.Execute" i min default.asp side - har lige forsøgt at illustrere det :)

---------
begin default.asp

    server execute min_side.asp {

        include fil_med_Response.Expires(...osv).asp

        ASPImage funktionen er på siden min_side.asp

    }

end default.asp
---------
Avatar billede olhansen Nybegynder
15. august 2007 - 08:41 #8
Hej!

Jeg har ofte haft samme problem. Response.expires virker ikke godt nok!
Du kan ændre
Image.FileName = imgPath & "msg1.jpg"

Til

Image.FileName = imgPath & "msg1.jpg" & "?" & Now()

Dermed tror IE at det er et nyt billede hver gang

Mvh
Avatar billede w13 Novice
15. august 2007 - 12:24 #9
Alternativt skal Response.Expires (...osv) nok ind i ASPImage-dokumentet også. Har ikke arbejdet meget med Server.Execute, men muligvis kræver alle siderne en Expires, hvis man vil være sikker på at undgå dette.
Avatar billede olhansen Nybegynder
15. august 2007 - 14:17 #10
Hej. Næh jeg tror ikke det hjælper. Problemet her er vist at det ikke er selve aspsiden (eller html siden) der caches, men billedet msg1.jpg - hvis der sættes en tilfældig tekst efter billedet opfattes det som et nyt billede.
Avatar billede pidgeot Nybegynder
15. august 2007 - 14:22 #11
Hvad med om du flyttede din billedkode ud i et separat ASP-script der skriver direkte ud til browseren, og så benytter det som stien til dit billede - på den måde slipper du også for den race condition du har når to brugere tilgår scriptet samtidigt.
Avatar billede weis Nybegynder
15. august 2007 - 15:27 #12
--> pidgeot

Vi du forklare det lidt nærmere, for de lydder som en god løsning (især hvis man undgår sammenstød mellem flere brugere) :)
Avatar billede pidgeot Nybegynder
15. august 2007 - 18:10 #13
Det bliver svært at gå meget mere i detaljer, da jeg ikke kan ASP, men i korte træk:

1) Flyt al den kode der har med genereringen af det billede at gøre ud i en seperat ASP-fil.
2) Lav koden om så den ikke skriver til en fil, men i stedet bare direkte til browseren.
3) Sæt content-type (image/jpeg i dette tilfælde) og cache-tingene inde i denne ASP-fil.
4) Brug den nye ASP-fil som dit billede (og ja, den skal have filtypen .asp).
Avatar billede weis Nybegynder
17. august 2007 - 21:29 #14
--> olhansen

Jeg fik det til at virke med din måde, supert ;D
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