как очистить или заменить кэшированное изображение - PullRequest
34 голосов
/ 26 ноября 2008

Я знаю, что есть много способов предотвратить кэширование изображений (например, с помощью тегов META), а также несколько полезных приемов, чтобы гарантировать, что текущая версия изображения отображается при каждой загрузке страницы (например, image.jpg? x = timestamp), но есть ли способ на самом деле очистить или заменить изображение в кэше браузера, чтобы ни один из указанных выше методов не был необходим?

В качестве примера, скажем, на странице 100 изображений, которые называются "01.jpg", "02.jpg", "03.jpg" и т. Д. Если изображение "42.jpg" заменено, есть ли способ заменить его в кеше, чтобы "42.jpg" автоматически отображал новое изображение при последовательных загрузках страницы? Я не могу использовать метод мета-тега, потому что мне нужно постоянно заменять ISN-T, чтобы он оставался в кэше, и я не могу использовать метод отметки времени, потому что я не хочу, чтобы ВСЕ изображения загружались каждый раз, когда страница грузы.

Я ломал голову и искал в интернете способ сделать это (желательно через javascript), но не повезло. Есть предложения?

Ответы [ 17 ]

0 голосов
/ 26 ноября 2008

Изменить ETAG для изображения.

0 голосов
/ 14 сентября 2016

попробуйте следующие решения,

myImg.src = "http://localhost/image.jpg?" + new Date (). GetTime ();

У меня работают вышеперечисленные решения:)

0 голосов
/ 20 октября 2014

Я попробовал что-то смехотворно простое:

Перейдите в папку FTP на веб-сайте и переименуйте папку IMG в IMG2. Обновите свой сайт, и вы увидите, что изображения будут отсутствовать. Затем переименуйте папку IMG2 обратно в IMG, и все готово, по крайней мере, у меня это получилось в Safari.

0 голосов
/ 26 ноября 2008

В случае повторной загрузки изображения, есть ли способ ОЧИСТИТЬ или ЗАМЕНИТЬ ранее кэшированное изображение на стороне клиента? В моем примере выше цель состоит в том, чтобы заставить браузер забыть, что такое «42.jpg»

Вы используете Firefox правильно?

  • Найти Tools Меню
  • Выбрать Clear Private Data
  • Снимите все флажки, за исключением того, что Cache отмечен
  • Нажмите ОК

: -)

На полном серьезе, я никогда не слышал о существовании такой вещи, и я сомневаюсь, что для этого есть API. Я не могу себе представить, что это было бы хорошей идеей для части разработчиков браузеров, чтобы позволить вам копаться в их кеше, и я не вижу мотивации, чтобы они когда-либо реализовывали такую ​​функцию.

Я НЕ МОГУ использовать метод мета-метки ИЛИ метод метки времени, потому что я хочу, чтобы все изображения кэшировались при нормальных обстоятельствах.

Почему вы не можете использовать временную метку (или etag, что равнозначно одному и тому же)? Помните, что вы должны использовать метку времени самого файла изображения , а не просто Time.Now.
Я ненавижу быть носителем плохих новостей, но у вас нет других вариантов.

Если изображения не изменятся, также не будет отметка времени, поэтому все будет кэшироваться «при нормальных обстоятельствах». Если изображения действительно изменятся, они получат новую временную метку (которая потребуется для кэширования), но тогда эта временная метка останется действительной навсегда, пока кто-то не заменит изображение снова.

0 голосов
/ 06 декабря 2012

Чтобы заменить кеш для pictore, вы можете сохранить на стороне сервера некоторое значение версии, а когда вы загружаете картинку, просто отправьте это значение вместо отметки времени. Когда ваше изображение будет изменено, измените его версию.

0 голосов
/ 27 ноября 2008

Нет, нет способа принудительно удалить файл из кэша браузера ни веб-сервером, ни чем-либо, что вы можете поместить в отправляемые файлы. Кэш браузера принадлежит браузеру и контролируется пользователем.

Следовательно, вы должны относиться к каждому файлу и каждому URL как к ценному ресурсу, которым нужно тщательно управлять.

Поэтому предложение porneL о создании версий файлов изображений, похоже, является лучшим долгосрочным ответом. ETAG используется в нормальных условиях, но, может быть, ваши усилия свели его на нет? Попробуйте изменить ETAG, как предложено.

0 голосов
/ 17 декабря 2009

При изменении имени файла изображения это не вариант, тогда используйте переменную сеанса на стороне сервера и функцию javascript window.location.reload(). Следующим образом:

После завершения загрузки:

Session("reload") = "yes"

На странице загрузки:

If Session("reload") = "yes" Then
    Session("reload") = Nothing
    ClientScript.RegisterStartupScript(Me.GetType), "ReloadImages", "window.location.reload();", True)
End If

Это позволяет клиентскому браузеру обновляться только один раз, поскольку переменная сеанса сбрасывается после одного события.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...