我正在使用以下函数在asp.net mvc中显示byte []数组图像
public ActionResult Images(int id)
{
byte[] imageData = GetImage(id);
string contentType = "image/jpeg";
return File(imageData, contentType);
}
<img src="/Home/Images/2">
所以问题是我不想显示 / Home / Images / 2 。我想用像这样的图像格式显示任何随机名称
> /Home/Images/imgnameetc.jpg
注意: 我有图像只是byte []数组形式。没有任何其他信息,如名称,图像格式
我确实搜索过但我找不到任何解决方案
请帮忙。
答案 0 :(得分:1)
您的服务器端代码无法欺骗用户导航到的网址。如果他们导航到/Home/Images/2
,那么 就是网址 。您可以做的是让他们导航到/Home/Images/imgnameetc.jpg
而不是 /Home/Images/2
,但是您需要配置路由以允许名称而不是一个id,并且在某个地方可以从名称(/ slug)而不是id中查找详细信息。例如,您的数据库中可能有一个UrlSlug
列被索引(我建议使用唯一且非群集的,对非空值进行限制,并将id作为附加的包含值包含(不是部分)索引的,但可用于slug =&gt; id查询),其中包含该记录的imgnameetc.jpg
,因此您可以通过简单的where
测试找到它。
您可以做的另一件事是设置 content-disposition 标头,它告诉浏览器文件如何标识自己;例如,如果用户尝试保存文件,则将"content-disposition"
标头设置为"inline;filename=imgnameetc.jpg"
可能有帮助;但是, 不会 更改浏览器中显示的网址。
答案 1 :(得分:0)
路由表必须配置为接受URL中的图像名称。无论您在何处存储图像,都可以将名称与其一起存储。一个单独的数据库列。
在Global.asax的注册路由方法中,尝试写一下。
routes.MapRoute(
"ImageRoute", // Route name
"{controller}/{action}/{imageName}", // URL with parameters
new { controller = "Home", action = "Images", imageName = UrlParameter.Optional });
EX url = localhost / Home / Images / image1.jpg。
答案 2 :(得分:0)
看看以下网址, 您可以在MVC路由器的帮助下实现此目的。只需添加一个特定于您的请求的路由器,并为其配置IIS。
<强> Image with name and format 强>