【问题标题】:Dynamic logo image in layout page using MVC使用 MVC 的布局页面中的动态徽标图像
【发布时间】:2018-10-11 18:11:53
【问题描述】:

我只是在制作简单的网络应用程序,用户可以在其中使用 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)时它会起作用。

db 查询对于服务器而言可能不是负担。所以我可能会坚持使用第一种方法。但我不确定。 如果任何有经验的人可以给我任何提示,我将不胜感激。 谢谢,

【问题讨论】:

    标签: html css asp.net-mvc dynamic


    【解决方案1】:

    我建议在用户上传徽标后在服务器上进行图像转换。为了节省空间和带宽,大多数网络提供商(例如 Twitter)将图像保存为 JPG。

    【讨论】:

      【解决方案2】:

      您可以将徽标路径存储在会话中并仅在用户登录时刷新它

      检查此代码

          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;
          }
      

      【讨论】:

        猜你喜欢
        • 2014-08-23
        • 2017-07-18
        • 2019-01-23
        • 1970-01-01
        • 2023-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多