mattiasnordinMedlem sedan maj 20012 062 inlägg
Hej.
Jag har en webkamera och ett program som automatiskt tar bilder var 10:e sekund. Problemet jag får är att bilden cachas och inte uppdateras som jag vill. Jag vet att det ska gå att få klienten att inte cacha men jag har inte fått det att fungera 100% på någon dator.
Jag kan bevisa att bilden på servern byts ut. Klienten har dock kvar samma gamla bild fastän jag tömmer cachen.
Funderar på om det inte går att använda ett VB-skript som tittar på hårddisken i en viss katalog och sedan visar filen med det senaste last modified date. På så sätt kan jag tvinga min webkamera applikation att spara bilden med ett löpnummer och det kan väl klienten omöjligen cacha???
Hur returnerar man smidigast filen med senast modifierat datum?
Är detta den slutgiltiga lösningen för cachningen?
Jag använder internet explorer 6.0 och Internet information server 5.x.
Mvh
Mattias Nordin
Jesper TMedlem sedan nov. 20017 058 inlägg
mattiasnordinMedlem sedan maj 20012 062 inlägg
hmmm... Tack för förslaget.
Är det någon som har fått det att fungera i praktiken???
Jag har provat på två olika IIS5.x servrar och på X antal klienter och det fungerar inte.
Det som uppstår är att bilderna skapas av min webkameraapplikation och kopieras till destinationkatalogen. Där har jag en (provat en massa olika) htmlsida som ska ladda bilden utan att cacha den. Detta har jag faktiskt fått att fungera i ca två minuter innan det hela började cachas. Jag har även provat att använda en java applet som ska ladda bilderna men den gör likadant...
Om jag dubbelklickar på bilden på hårddisken så ser jag att denna byts ut var 10;e sekund. Men i webläsaren syns enbart den gamla bilden.
Det konstigaste är att även om jag fysiskt tar bort orginalet från servern och går in i webläsaren och tömmer klientens cache så syns fortfarande den gamla bilden. Jag har verifierat sökvägarna och provat att bytt filnamn. När jag byter till ett nytt namn på filen så fungerar det till det är dags att refresha websidan.
Detta har diskuterats på:
http://www.webforum.nu/showthread.php?s=&threadid=70411
Men jag funderar nu på en lösning där jag inte skriver över befintlig bild med samma namn. Att göra ett skript som går in på disken och letar upp den senaste skapade filen måste väl vara en effektiv workaround???
Är det någon som kan lösa mitt problem på annat sätt så får ni det alternativa Nobelpriset av mig...
Mvh
Mattias
mattiasnordinMedlem sedan maj 20012 062 inlägg
<%
Response.Buffer = true
Response.Expires=0
Response.ExpiresAbsolute = Now()
Response.AddHeader "pragma", "no-cache"
Response.AddHeader "cache-control", "private"
Response.CacheControl = "no-cache"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta http-Equiv="pragma" content="no-cache">
<meta http-Equiv="refresh" content="10">
<meta http-equiv="expires" content="Wed, 01 Sep 1999 01:01:01 GMT">
<title>My Webcam</title>
</head>
<body bgcolor="#8080FF" text="#FFFFFF">
<%
varStrPath = "/katalogen/"
strPath = server.mappath(varStrPath)
set objFSO = Server.CreateObject("Scripting.FileSystemObject")
set objFolder=objFSO.GetFolder(strPath)
Set Files = objFolder.Files
%>
<center>
<% dim objItem
for each objItem in objFolder.Files %>
<% if objItem.Type = "JPEG Image" then %>
<img src="<%=objItem.name %>"><br><i><%=objItem.name %></i><br>
File Last modified date: <b> <%=objItem.DateLastModified %></b><br><br><br><br>
<% end if %>
<% next %>
</center>
</body>
</html>
Sidan ovan visar att bilden på servern ersätts med en ny genom att jag printar ut objItem.DateLastModified. Men bilderna är cachade fastän sidan refreshas var 10:e sekund. Bilderna ersätts även de var 10:e sekund.
Jag har labbat med alla möjliga inställningar. Kan det vara så illa att servern behöver startas om???
Är det någon som vet om det finns någon dokumentation på hur webläsaren cachar bilder? Har det med storleken på filen att göra eller namnet? Uppenbarligen så har last modified inte något med saken att göra...
Mvh
Mattias
ToonsterMedlem sedan feb. 20001 546 inlägg
Som jag skrev i den tråden som länkats till i detta forum, så gör koden som jag visade att bara bilden laddas om (som man brukar vilja med en webbkamera) och inte sidan.
Webbläsaren cachar bilderna efter bildernas namn, det spelar ingen roll om man trixar med kod eller inställningar på servern, det är webbläsaren som är boven i dramat. Därför så använder man Javascript som jag visade i den förra koden.
Det finns inget sätt att lösa det med kod på serversidan, förutom att byta namn på bilden.
Funkar inte koden jag gav dig? det är ju den "snyggaste" lösningen att bilden bara uppdateras, och inte hela sidan.
mattiasnordinMedlem sedan maj 20012 062 inlägg
Så här ser min lösning ut. Denna lösning kan omöjligen cacha bilden då filnamnet är unikt vid varje refresh...
<%
varStrPath = "/tab_offices/off_uppsala/itjour/webcam/"
strPath = server.mappath(varStrPath)
set objFSO = Server.CreateObject("Scripting.FileSystemObject")
set objFolder=objFSO.GetFolder(strPath)
Set Files = objFolder.Files
dim objItem
%>
<% ' Loopar igenom alla filer i katalogen '
for each objItem in objFolder.Files
if objItem.Type = "JPEG Image" then
varFileName = objItem.name
varFileName = Lcase(varFileName)
' Kollar om filen webcam.jpg finns '
varFindFile = InStr(varFileName, "thumb.jpg")
if varFindFile > 0 then
varDate = date
varTime = time
varTime = Replace(varTime, ":", ".")
varNewFileName = "thumb[" &varDate &"](" &varTime &").jpg"
' Tar bort alla gamla filer '
' Döper om filen till nytt unikt namn '
objItem.Name = varNewFileName
session("rememberLastFilename") = varNewFileName
for each objItem2 in objFolder.Files
' Om filer finns i denna katalog som har de unika namnet'
if InStr(objItem2.name, "[") > 0 and InStr(objItem2.name, "]") > 0 and InStr(objItem2.name, "(") > 0 and InStr(objItem2.name, ")") > 0 then
' Tar bort alla filer utom den nyaste '
if not objItem2.Name = varNewFileName then
objItem2.Delete
end if
end if
next
end if
end if
next %>
<!---=== VISAR BILDEN ===--->
<img src="<%=session("rememberLastFilename")%>"><br>"<%=session("rememberLastFilename")%> "
<!---=== VISAR BILDEN ===--->
Inkluderar man denna sida i en IFRAME TAG så uppdateras inte heller hela sidan utan enbart det som finns i IFRAME fönstret. Jag hade hellre löst det på något annat sätt... men detta fungerar...
Är det någon som har några andra förslag så är ni välkommna.
Mvh
Mattias
ToonsterMedlem sedan feb. 20001 546 inlägg
Men varför vill du ladda om hela sidan? Räcker det inte med bara bilden?
mattiasnordinMedlem sedan maj 20012 062 inlägg
Jo visst om det fungerar :-) Jag får inte javascriptet att fungera varken på jobbet eller hemma (privat server).
Men denna ASP lösning fungerar på alla ställen jag har provat den. Aspsidan laddas om men om jag använder en <iframe...> på min huvudsida så spelar det inte någon roll. Misstänker att detta är mycket mer resurskrävande men som sagt. Jag får inte det andra att fungera. Är det någon som har samma miljö som mig som har fått det att fungera?
Mvh
Mattias
KoggenMedlem sedan juni 2002169 inlägg
Jag hittade denna kodsnutt vid sökning här på forumet tidigare när jag försökte lösa samma problem:
Randomize
response.write "<img src='../bilder/" & rs("bild") & "?num=" & int(rnd*1000) & "' alt='" & rs("fnamn") & " " & rs("enamn") & "' width='60'>"
Jag har använt koden på två olika sidor inom samma site, och det funkar perfekt på den ena och inte alls på den andra!
Koden på sidorna är identisk.
I hate cache.....
mattiasnordinMedlem sedan maj 20012 062 inlägg
Här kommer en bättre version av "Anti-cache lösningen"...
Denna passar bra till https://www.tincam.com programmet.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-Equiv="refresh" content="5">
<title>My Webcam</title>
</head>
<body bgcolor="#8080FF" text="#FFFFFF">
<%
varStrPath = "/tab_offices/off_uppsala/itjour/webcam/"
strPath = server.mappath(varStrPath)
set objFSO = Server.CreateObject("Scripting.FileSystemObject")
set objFolder=objFSO.GetFolder(strPath)
Set Files = objFolder.Files
dim objItem
%>
<% ' Loopar igenom alla filer i katalogen '
for each objItem in objFolder.Files
if objItem.Type = "JPEG Image" then
varFileName = objItem.name
varFileName = Lcase(varFileName)
' Kollar om filen thumb.jpg finns '
varFindFile = InStr(varFileName, "thumb.jpg")
if varFindFile > 0 then
varDate = date
varTime = time
varTime = Replace(varTime, ":", ".")
varNewFileName = "thumb[" &varDate &"](" &varTime &").jpg"
' Kopierar filen till nytt unikt namn '
objItem.copy (strPath &"\" &varNewFileName)
session("rememberThumbFilename") = varNewFileName
end if
' Kollar om filen webcam.jpg finns '
varFindFile = InStr(varFileName, "webcam.jpg")
if varFindFile > 0 then
varDate = date
varTime = time
varTime = Replace(varTime, ":", ".")
varNewFileName = "webcam[" &varDate &"](" &varTime &").jpg"
' Kopierar filen till nytt unikt namn '
objItem.copy (strPath &"\" &varNewFileName)
session("rememberWebcamFilename") = varNewFileName
end if
end if
next %>
<%
for each objItem2 in objFolder.Files
' Om filer finns i denna katalog som har de unika namnet'
if InStr(objItem2.name, "[") > 0 and InStr(objItem2.name, "]") > 0 and InStr(objItem2.name, "(") > 0 and InStr(objItem2.name, ")") > 0 then
' Tar bort alla filer utom den nyaste '
varRememberWebcamFilename = session("rememberWebcamFilename")
varRememberThumbFilename = session("rememberThumbFilename")
if not objItem2.Name = varRememberWebcamFilename AND not objItem2.Name = varRememberThumbFilename then
objItem2.Delete
end if
end if
next
%>
<!---=== VISAR BILDEN ===--->
<a href="<%=session("rememberWebcamFilename")%>" target=newWindow><img src="<%=session("rememberThumbFilename")%>" ALT="Updated every 15 seconds"></a>
<!---=== VISAR BILDEN ===--->
Mvh
Mattias
ToonsterMedlem sedan feb. 20001 546 inlägg
Vad är det som inte fungerar då? Jag har testat på flera olika datorer/servrar och det funkade kanon. Jag använde bara javascriptet, och inga meta direktiv.
Det enda som strulade lite var att man fick hitta "rätt" uppdateringstid för både sidan och programmet som sparar bilden, annars kan det bli "halva" bilder osv. Jag hade 10 sek på webbsidan, och 7 sek i web-cam programmet. Eftersom man skickar med en parameter till bilden med ett unikt namn, så borde inte ens proxy'n cacha.