我只是制作简单的网络应用程序,用户可以使用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查询可能不是服务器方面的负担。所以我可能会坚持使用第一种方法。但我不确定。 如果有经验的人可以给我任何提示,我会非常感激。 谢谢,
答案 0 :(得分:0)
我建议用户上传徽标后在服务器上进行图片转换。为了节省空间和带宽,大多数Web提供商(例如,Twitter)将图像保存为JPG。
答案 1 :(得分:0)
您可以在会话中存储徽标路径,并仅在用户登录时刷新
检查此代码
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;
}