如何用名称和格式显示byte []数组图像?

时间:2013-03-13 11:54:00

标签: c# asp.net-mvc

我正在使用以下函数在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 []数组形式。没有任何其他信息,如名称,图像格式

我确实搜索过但我找不到任何解决方案

请帮忙。

3 个答案:

答案 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