när du visar bilden så lägg till en slumpparameter.
exempelvis.
<img src="mypicture.jpg?rnd=967">
vid nästa anrop så slumpas en annan siffra.
<img src="mypicture.jpg?rnd=189">
8 svar · 754 visningar · startad av silo
Har en sida där användare laddar upp en bild som sparas och sedan visas för användaren på en gång. Om användaren redan har laddat upp en bild tidigare så skrivs den gamla bilden över så samma namn på bilden används hela tiden.
Eftersom samma namn på bilden används så hinner inte alltid servern med utan den gamla bilden visas i stället för den nya bilden.
Finns det något sätt att se till att inte programmet går vidare innan bilden är nersparad till disk? Eller är det något annat som är galet?
när du visar bilden så lägg till en slumpparameter.
exempelvis.
<img src="mypicture.jpg?rnd=967">
vid nästa anrop så slumpas en annan siffra.
<img src="mypicture.jpg?rnd=189">
Nu hängde jag inte alls med. Kan du förklara lite mer?
Problemet är att webbläsaren/webbservern har bilden cachad. Så trots att du har laddat upp en ny bild så visas den gamla eftersom det är samma namn på bilden.
Om du lägger till en querystring till bildnamnet så tror webbläsaren/webbservern att det är en annan bild/fil som den frågar efter och försöker därför inte hämta den från cachen.
Men för att inte även querystringvärdet skall cachas så måste du slumpa fram ett värde. Normalt brukar det räcka med ett tal mellan 1 och 1000, men du kan naturligtvis använda en guid eller något annat för att få det helt unikt.
Ok, då är jag med. Ska prova...
Blir tokig på det här... Jag tror att det fungerar bättre nu när jag har ett random-värde men eftersom felet bara uppstod ibland så vet jag inte med säkerhet men vad jag har testat hitils så fungerar det. Nu till nästa problem.
Om en användare inte har laddat upp någon bild så visas en default-bild. När sedan användaren laddar upp en bild för första gången så visas inte den nya bilden förrens användaren har laddat om sidan. Har prövat att nästan hårdkoda filnamnet på bilden med hjälp av Session-variabel men den visar ändå default-bilden. Här är en kod som jag testat lite med. Sessein["bildnamn"] sätts när bilden laddas upp.
if (Session["bildnamn"].Equals("ib.gif"))
{
imgAnvBild.ImageUrl = "~/hb/" + "ib.gif";
}
else
{
Random rndNr = new Random();
rndNr.Next(1000);
imgAnvBild.ImageUrl = "~/ab/" + Session["bildnamn"] + "?rnd=" + rndNr;
}
Det fungerar som sagt inte första gången användaren laddar upp en bild men sen så fungerar det hur bra som helst.
Jag har liknande problem, dock har jag jobbat med att ta fram datum & tid efter ? i stället med ett enkelt <% Response.Write(Now()) %> dock fungerar det inte i FireFox som verkar strunta i vad som står efter: ?
(Inte för att det bringade nån klarhet men ... :))
Jag har löst problemet genom att göra en Response.Redirect efter uppladdningen. Vet inte om det räknas som en "fullösning" men det funkar iaf.
Borde inte en bättre idé vara att hascha bilden vid uppladdningen, slänga in hashvärdet i en databas och lägga in hashvärdet i querystringen? Då får du ny qs enbart när du laddat upp en ny bild. Besökarna använder cachade bilderna så länge qs är densamma, men laddar hem en ny så fort det ändras = minskad trafik mellan server och användare.
Bara en tanke... :OO