тупое кеширование в asp.net - PullRequest
       34

тупое кеширование в asp.net

0 голосов
/ 28 октября 2009

я использую такой код

string.Format("<img src='{0}'><br>", u.Avatar);

u.Avatar - это как '/img/path/pic.jpg'

но на этом сайте я могу загрузить новое изображение вместо старого pic.jpg. так что картина новая, но имя старое. и браузер показывает старую картинку (кеш). если я поставлю случайное число, например /img/path/pic.jpg?123, то все работает нормально, но оно мне нужно только после загрузки, а не всегда как я могу решить это?

Ответы [ 5 ]

5 голосов
/ 28 октября 2009
string imgUrl = _
string.Format("<img src='{0}?{1}'><br>", _
u.Avatar, _
FunctionThatLookupFileSystemForItsLastModified(u.Avatar).Ticks.ToString());
2 голосов
/ 28 октября 2009

Вместо прямой связи с изображениями рассмотрите возможность настройки универсального обработчика HTTP для обслуживания изображений.

MSDN: обзор обработчиков HTTP и модулей HTTP
Переполнение стека: как использовать кэширование вывода в обработчике .ashx

0 голосов
/ 28 октября 2009

Вы можете установить зависимость кэша, используя пространство имен System.Web.Caching.CacheDependency. Это может установить зависимость от загруженного файла и автоматически освободит кэш для этого файла при изменении файла.

На MSDN и в других местах много статей и прочего, поэтому я не буду вдаваться в подробности обо всем этом уровне детализации.

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

0 голосов
/ 28 октября 2009

Добавить DateTime.Now.Ticks к URL-адресу изображения:

string imgUrl = 
    string.Format("<img src='{0}?{1}'><br>", u.Avatar,DateTime.Now.Ticks);

РЕДАКТИРОВАТЬ: Я не думаю, что эта лучшая практика даже практика, которую я хотел бы использовать. Это всего лишь предположение, учитывая ограниченную информацию, представленную на случай, если реализация Random не является действительно случайной.

0 голосов
/ 28 октября 2009

Прочитайте ваш пост еще раз ,, извините за общий ответ.

Чтобы обойти это, сделайте следующее В Application_Start создайте словарь с загруженными изображениями, сохраните его в объекте Application, установите для него значение null. После загрузки изображения добавьте его в этот словарь. Оберните каждое место, где аватары появляются на вашем сайте, с функцией, которая оценивает изображение в Словаре, если найдено, возвращает imagename.jpg? Randomnumber, а затем удаляет его из словаря, иначе возвращает только imagename.jpg.

Это будет тяжело, потому что вам нужно будет проверить каждое изображение в Словаре, но это будет именно то, что вам нужно.

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