Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

Îåêßíçóå áðü ôï ìÝëïò xakou. Τελευταία δημοσίευση από το μέλος Τάσκος Γιώργος στις 29-05-2009, 09:35. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-05-2009, 23:15 51003

    Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    Χρησιμοποιώ formview για να βλέπω τα δεδομένα μου. Όταν αλλάζω τις εικόνες, edit από το formview, και φορτώνω νέες  με το ίδιο όνομα (έτσι το θέλω), ο ΙΕ cachaρει τις εικόνες.

    Δεν θέλω να αλλάξω κάτι στον ΙΕ για να του λέω να διαβάζει ΠΑΝΤΑ την σελίδα.

     

    Δηλαδή στη θέση pic αποθηκεύεται πάντα η εικόνα με το όνομα "΄ΜΗΤΣΟΣ". Ο "Μήτσος" μπορεί να αλλάξει την εικόνα του, αλλά θα αποθηκευτεί ξανά σαν MHTΣΟΣ.jpg

    Διάβασα πως μπορώ να προσθέσω την DATE.NOW.TICKS δίπλα στην εικόνα, ώστε να βλέπει πάντα διαφορεικό όνομα και να μην cachaρει. Δηλαδή να είναι κάπως έτσι : ImageUrl="someimage.jpg&t=633783364960000000" 

     

    Αυτό με το παρακάτω, πώς το κάνω;

    <asp:Image ID="Image1" runat="server" Height="60px"

    ImageUrl='<%# Bind("pic1") %>' Width="80px" />

    Πως μπορώ να προσθέσω το DATE.NOW.TICKS δίπλα στο Bind("pic1")....  ?

  •  27-05-2009, 09:27 51010 σε απάντηση της 51003

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    Δοκίμασε το <%# Bind("pic1") & "?id=" & myRandomInteger() %> και αν δεν πιάνει δοκίμασε με Eval() αντί για Bind(). 

    Η myRandomInteger() θα είναι μία protected function στο code behind.

    Μία άλλη λύση είναι το <%# GetRandomUrl(Eval("pic1")) %>, όπου η GetRandomUrl(ByVal ImageUrl As String) θα είναι protected function στο code behind.


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  27-05-2009, 15:01 51025 σε απάντηση της 51010

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    <asp:Image ID="Image1" runat="server"

    BackColor="#DDDDDD" Height="60px" Width="80px"

    ImageUrl='<%# eval("pic1") & "?id=" & myRandomInteger() %>' />

    ====

    Protected Function myRandomInteger() As String

    Dim rdm = Date.Now.Ticks

    myRandomInteger = rdm.ToString

    End Function

    ====

     

     

  •  27-05-2009, 15:57 51029 σε απάντηση της 51025

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    Με Bind δεν παίζει....

    H παραπάνω eval αν δεν έχει τιμή μου σβήνει το url μέσα από τη ΒΔ. Αυτό πως μπορώ να το αποφύγω;

     

  •  27-05-2009, 15:59 51030 σε απάντηση της 51025

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    Είναι κακή ιδέα να καταργήσεις το caching άνευ λόγου. Αν οι εικόνες όντως αλλάζουν σε κάθε κλήση, καλώς. Αν και δεν μπορώ να φανταστώ γιατί να συμβαίνει κάτι τέτοιο - εκτός και αν φτιάχνεις τη δική σου έκδοση του CAPTCHA. Σε κάθε άλλη περίπτωση θα δημιουργήσεις πολύ μεγάλο φόρτο στο server σου απλά για να ξαναστείλεις τα ίδια δεδομένα. Αν θέλεις όμως να στέλνεις νέες εικόνες όταν αυτές αλλάζουν έχεις διάφορους τρόπους να το πετύχεις.

    Καταρχήν, το πρωτόκολλο HTTP επιτρέπει σε μία σελίδα να πει αν και για πόσο πρέπει να μείνει στην Cache είτε του browser είτε των ενδιάμεσων proxy μέσω του Cache-Control header. Αυτόν τον ελέγχεις στο ASP.NET μέσω του OutputCache directive σε επίπεδο σελίδας ή User Control. Δες το Setting the Cachability of a web page για να δεις πως να απενεργοποιήσεις το client caching μέσω του OutputCache.

    Η άλλη επιλογή που έχεις είναι να χρησιμοποιήσεις μεν caching αλλά να προκαλείς refresh όταν αλλάζει το περιεχόμενο της σελίδας. Αν οι εικόνες σου βρίσκονται σε κάποιο folder μπορείς να χρησιμοποιήσεις file dependencies για να ξαναδημιουργηθεί η σελίδα μόνο αν αλλάξουν τα συγκεκριμένα αρχεία.

    Πίσω από τα dependencies κρύβεται το ETag, ένα HTTP Header το οποίο λέει στον browser ότι τα περιεχόμενα έχουν αλλάξει. Όσο μία σελίδα έχει το ίδιο ETag ο browser δεν χρειάζεται να ξαναφορτώσει τα περιεχόμενα της. Αν το ETag αλλάξει, ο browser θα πρέπει να ξαναφορτώσει τη σελίδα. Μπορείς να επέμβεις άμεσα στο ETag της σελίδας σου μέσω της Response.Cache.SetETag().


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-05-2009, 17:28 51034 σε απάντηση της 51030

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    Big Smile
    Παναγιώτης Καναβός:

    Είναι κακή ιδέα να καταργήσεις το caching άνευ λόγου. Αν οι εικόνες όντως αλλάζουν σε κάθε κλήση, καλώς. Αν και δεν μπορώ να φανταστώ γιατί να συμβαίνει κάτι τέτοιο - εκτός και αν φτιάχνεις τη δική σου έκδοση του CAPTCHA. Σε κάθε άλλη περίπτωση θα δημιουργήσεις πολύ μεγάλο φόρτο στο server σου απλά για να ξαναστείλεις τα ίδια δεδομένα. Αν θέλεις όμως να στέλνεις νέες εικόνες όταν αυτές αλλάζουν έχεις διάφορους τρόπους να το πετύχεις.

    Καταρχήν, το πρωτόκολλο HTTP επιτρέπει σε μία σελίδα να πει αν και για πόσο πρέπει να μείνει στην Cache είτε του browser είτε των ενδιάμεσων proxy μέσω του Cache-Control header. Αυτόν τον ελέγχεις στο ASP.NET μέσω του OutputCache directive σε επίπεδο σελίδας ή User Control. Δες το Setting the Cachability of a web page για να δεις πως να απενεργοποιήσεις το client caching μέσω του OutputCache.

    Η άλλη επιλογή που έχεις είναι να χρησιμοποιήσεις μεν caching αλλά να προκαλείς refresh όταν αλλάζει το περιεχόμενο της σελίδας. Αν οι εικόνες σου βρίσκονται σε κάποιο folder μπορείς να χρησιμοποιήσεις file dependencies για να ξαναδημιουργηθεί η σελίδα μόνο αν αλλάξουν τα συγκεκριμένα αρχεία.

    Πίσω από τα dependencies κρύβεται το ETag, ένα HTTP Header το οποίο λέει στον browser ότι τα περιεχόμενα έχουν αλλάξει. Όσο μία σελίδα έχει το ίδιο ETag ο browser δεν χρειάζεται να ξαναφορτώσει τα περιεχόμενα της. Αν το ETag αλλάξει, ο browser θα πρέπει να ξαναφορτώσει τη σελίδα. Μπορείς να επέμβεις άμεσα στο ETag της σελίδας σου μέσω της Response.Cache.SetETag().

    Παναγιώτη με μπέρδεψες....

    Το πρόβλημα που έχω είναι ότι όταν αλλάζω εικόνες και οι εικόνες έχουν το ίδιο όνομα (έτσι πρέπει να είναι), τότε δεν τις εμφανίζει τις νέες, απλά πρέπει να πατήσω το κουμπί refresh στον IE.

    Με την τεχνική

    <asp:Image ID="Image1" runat="server" 

    BackColor="#DDDDDD" Height="60px" Width="80px"

    ImageUrl='<%# eval("pic1") & "?id=" & myRandomInteger() %>' />

    ====

    Protected Function myRandomInteger() As String

    Dim rdm = Date.Now.Ticks

    myRandomInteger = rdm.ToString

    End Function

    ====

    διαβάζει πάντα τις νέες εικόνες, σωστά! Το πρόβλημα είναι πως όταν δεν υπάρχει εικόνα στο FileUpload1 τότε σβήνει την εγγραφή από τη ΒΔ.

     Το <%@OutputCache Duration="1" VaryByParam="location;count" %>  δεν παίζει... Μου ξαναβγάζει τις ίδιες εικόνες. Πρέπει manual να πατήσω refresh button για να δω.

    Το file dependencies  παίζει όταν είναι ίδιο το όνομα του αρχείου;

    Και τέλος το .SetETag(). δεν το πολυκατάλαβα Tongue Tied

     

    Κάθε βοήθεια ή και λίγος κώδικας θα είναι ότι καλύτερο

  •  27-05-2009, 19:51 51039 σε απάντηση της 51025

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    xakou:

    <asp:Image ID="Image1" runat="server"

    BackColor="#DDDDDD" Height="60px" Width="80px"

    ImageUrl='<%# eval("pic1") & "?id=" & myRandomInteger() %>' />

    ====

    Protected Function myRandomInteger() As String

    Dim rdm = Date.Now.Ticks

    myRandomInteger = rdm.ToString

    End Function

    ====

     

    Μόνο το παραπάνω δουλεύει σωστά, αλλά όταν δεν έχει το πεδίο FileUpload τιμή τότε σβήνει την εγγραφή από τη ΒΔ.

    Αυτό πρέπει  να το μετατρέψω σε Bild Tongue Tied

     

    Δοκίμασα επίσης και το

    Response.Cache.SetCacheability(HttpCacheability.NoCache) αλλά ούτε αυτό δουλεύει...

  •  27-05-2009, 20:29 51040 σε απάντηση της 51039

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    Πιστεύω να είναι το τελευταίο post σε αυτό το θέμα.... Sad

     

    If FileUpload1.HasFile Then

    ......

    e.NewValues("pic1") = "~/upload/" & idcode & "-1.jpg"

    ........

    Else

    ......

    ' AN ΕΔΩ βάλω κάτι που να κρατάει την προηγούμενη τιμή, τότε θα λύσω το πρόβλημα μου...

     

     

  •  29-05-2009, 09:35 51101 σε απάντηση της 51040

    Απ: Δεν θέλω να cachaρει τις εικόνες ο ΙΕ...

    Θα συμφωνήσω ότι οι καλύτερες λύσεις είναι αυτές του Παναγιώτη. Γιατί μπερδεύτηκες?

    Θα έλεγα να κοιτάξεις λίγο το File Cache Dependency, εδώ θα βρείς ένα πολύ καλό παράδειγμα.

    Καλή επιτυχία.

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems