webForumDet fria alternativet

Visar gammal bild vid uppladdning av ny bild.

.NET

8 svar · 754 visningar · startad av silo

Medlem sedan nov. 200177 inlägg
Frågan#1

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?

Medlem sedan dec. 19995 874 inlägg
#2

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">

Medlem sedan nov. 200177 inlägg
#3

Nu hängde jag inte alls med. Kan du förklara lite mer?

Medlem sedan dec. 19995 874 inlägg
#4

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.

Medlem sedan nov. 200177 inlägg
#5

Ok, då är jag med. Ska prova...

Medlem sedan nov. 200177 inlägg
#6

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.

Medlem sedan juni 2001145 inlägg
#7

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 ... :))

Medlem sedan mars 200518 inlägg
#8

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.

Medlem sedan jan. 2005108 inlägg
#9

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

249 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)