Динамическое изображение логотипа на странице макета с использованием MVC - PullRequest
0 голосов
/ 01 мая 2018

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

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

На странице макета,

 <img src="@Url.Action("GetLogo","BaseController")" alt="Logo"/>

Действие "GetLogo" для сохраненного локального пути извлекается из базы данных и возвращает FileContentResult, как показано ниже

 public FileContentResult GetLogo(string param)
 {
    //retrieving path from db
    //return new FileContentResult(bytes, "image");
 }

Теперь это работает нормально. Но это кажется менее эффективным, потому что каждый раз, когда пользователь перемещается, страница макета тоже обновляется, и для получения информации о пути необходимо выполнить некоторый запрос в БД.

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

<img src="@Url.Content("~/Content/logo.png")" alt="Logo"/>

Таким образом, когда пользователь загружает новый файл логотипа, сервер должен будет изменить имя нового файла изображения логотипа на logo.png. Но я не уверен, что это будет работать, когда пользователь загружает файлы различных типов, таких как jpeg и gif.

Запрос БД не может быть бременем с точки зрения сервера. Поэтому я могу придерживаться первого подхода. Но я не уверен. Если кто-нибудь из опытных парней может дать мне какой-либо совет, я был бы очень признателен. Спасибо,

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

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

проверьте этот код

    public string GetLogo(string param)
    {
        string imagePath = "~/Content/Logo.png";//retrieve path from db here
        string filePathActual = Server.MapPath(imagePath);
        //put flag in DB isOverWritten
        if (isOverWritten)//only if image is overwritten in db then we write into the file
        {
            System.IO.File.WriteAllBytes(filePathActual,bytes);//this will refresh your image
        }

        return imagePath;
    }
0 голосов
/ 01 мая 2018

Я бы порекомендовал сделать преобразование изображений на сервере, как только пользователь загрузит свой логотип. Для экономии места и пропускной способности большинство веб-провайдеров (например, Twitter) сохраняют изображения в формате JPG.

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