powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Вывод аватарок
17 сообщений из 17, страница 1 из 1
Вывод аватарок
    #38954231
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро.

Ищу best way для вывода картинок сейчас выводится так

<img ng-src="/Base/userphoto?gender={{user.gender}}&SAMAccountName={{user.SAMAccountName }}" alt="contact" class="img-circle avatar hidden-phone">

пока файлы находятся в папке на сервере, (есть мысли брать сразу из базы, но есть но ....)

public FileContentResult userphoto(string gender, string SAMAccountName)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  {

           FileInfo fi = new FileInfo(string.Format("{0}\\{1}.jpg", Settings.MembershipSettings.UserAvatarDirectory, SAMAccountName));
            if (fi.Exists)
            {
                byte[] bytes = System.IO.File.ReadAllBytes(fi.FullName);
                return base.File(bytes, "image/jpeg");

            }

.....




Была вроде бы большая похожая тема , но не могу ее найти, дайте ссылку плизе.

Как лучше сделать , с кешированием и минимумом тормозов ?

Спасибо.
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954256
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вы файл отдает через экшен то допишите логику выставления 304, примерно так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public ActionResult Image(int id)
{
    var image = _imageRepository.Get(id);
    if (image == null)
        throw new HttpException(404, "Image not found");
    if (!String.IsNullOrEmpty(Request.Headers["If-Modified-Since"]))
    {
        CultureInfo provider = CultureInfo.InvariantCulture;
        var lastMod = DateTime.ParseExact(Request.Headers["If-Modified-Since"], "r", provider).ToLocalTime();
        if (lastMod == image.TimeStamp.AddMilliseconds(-image.TimeStamp.Millisecond))
        {
            Response.StatusCode = 304;
            Response.StatusDescription = "Not Modified";
            return Content(String.Empty);
        }
    }
    var stream = new MemoryStream(image.GetImage());
    Response.Cache.SetCacheability(HttpCacheability.Public);
    Response.Cache.SetLastModified(image.TimeStamp);
    return File(stream, image.MimeType);
}


а если у вас на прямую было б то в иис просто выставите настройку кэширования статического контента
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954259
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey1306,

хранить в базе данных лучше всего. вот алгоритм выдачи:

1. поискать файл в папке кеша
2. если файла в кеше нет, то:
2.1. достать содержимое из БД
2.2. сохранить в файл в папку кеша
3. отдать файл из папки кеша, соответственно, со всеми заголовками кеширования файла и с поддержкой 304 (проверка заголовков на изменение)

очень быстро, и главное, масштабируемо.
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954261
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

заголовок If-Modified-Since лучше вообще не учитывать, работать только с Etag
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954269
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
handmadeFromRu,

Спасибо.

А есть разница Action или IHttpHandler ?
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954275
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
ну я волне работы с яндексом еще))
а по поводу хранения фото в бд. тут бесконечный холивар, есть сторонники подхода что ты изложил, а я придерживаюсь хранить фото вне бд(но возможно я просто не сталкивался с тем что ты описал)
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954316
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuhVostt,
ну я волне работы с яндексом еще))
а по поводу хранения фото в бд. тут бесконечный холивар, есть сторонники подхода что ты изложил, а я придерживаюсь хранить фото вне бд(но возможно я просто не сталкивался с тем что ты описал)

Когда придётся развернуть своё ПО в кластере, тогда будешь с тоской вспоминать о времени когда решалось, где хранить картинки, в БД или в файлах )) Всегда всё храню в БД, и мне плевать на долбанные холиворы, кеширование на диске никто не отменял, никто не заставлят отдавать файлы прям из БД, а вот вопросы масштабирования надо заранее продумывать. Кроме того, мне очень нравится идея, что всю папку с файлами развёрнутого проекта можно грохнуть без тени сожаления, так как всё хранится в двух местах: в репозитории проект, в БД данные. И ничего лишнего. Для больших файлов подходят облака, свои или чужие. Но никаких хранений на диске!
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954320
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey1306А есть разница Action или IHttpHandler ?

Разница в чём? Делай как удобнее.
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954322
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuну я волне работы с яндексом еще))

отдавать заголовок Last-Modified можно и даже нужно, я про то, что не учитывать If-Modified-Since, а Яндекс преотлично понимает и обрабатывает Etag.
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954380
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

таки нет, как раз таки яндекс написал нам что мы не обрабатываем If-Modified-Since. а Last-Modified эт само собой. по поводу блобов в бд, на масштабирование да резонно
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954439
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно спросить откуда берется это

Код: c#
1.
 if (lastMod == image.TimeStamp.AddMilliseconds(-image.TimeStamp.Millisecond))



у меня

так выходит DateModify datetime, и разница всегда почему то s = 116.1002, и корекция просто Millisecond у меня не срабатывает, пришлось так .

Код: c#
1.
2.
var s = lastMod - account.DateModify;
if (lastMod == account.DateModify.AddTicks(s.Ticks))



или я чего то не понял
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954448
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бред написал я


разберусь
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954464
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuтаки нет, как раз таки яндекс написал нам что мы не обрабатываем If-Modified-Since.

вот оно что... обычно я тоже его всегда обрабатываю, просто для следования спецификации, но основное Etag, не знал что Яндекс требует ))
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954504
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey1306,

эт код я со so перетащил. я думал вам просто принцин нужен. просто сравните дату изменения записи/файла с тем что приходит в атрибуте заголовка и тогда 304 или 200
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954529
Andrey1306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuAndrey1306,

эт код я со so перетащил. я думал вам просто принцин нужен. просто сравните дату изменения записи/файла с тем что приходит в атрибуте заголовка и тогда 304 или 200

Спасибо, мне принцип и нужен , я хеш файла сравниваю , но с датой какой то прикол все равно есть
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954543
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttвот оно что... обычно я тоже его всегда обрабатываю, просто для следования спецификации, но основное Etag, не знал что Яндекс требует ))

хех они признали что формат даты передают левый) а теперь они пишут если параметр не верный, должны игнорировать, а не 400 плеваться.
...
Рейтинг: 0 / 0
Вывод аватарок
    #38954606
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuхех они признали что формат даты передают левый) а теперь они пишут если параметр не верный, должны игнорировать, а не 400 плеваться.

тут они неправы, по ходу пишет весьма далёкий от ИТ менеджер по связи с общественностью.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Вывод аватарок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]