0

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

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

请帮忙。

4

3 回答 3

1

您的服务器端代码不能欺骗用户导航到的 url。如果他们导航到/Home/Images/2那就是 url。您可以做的是让它们导航到/Home/Images/imgnameetc.jpg 而不是 /Home/Images/2,但是您需要配置路由以允许使用名称而不是 id,并且在某个地方可以从名称 (/slug) 而不是从 id 查找详细信息. 例如,您UrlSlug的数据库中可能有一个已编入索引的列(我建议使用唯一且非聚集的列,限制为非空值,并将 id 作为附加的包含值包括在内(不是索引的一部分,但可用于包含imgnameetc.jpg该记录的 slug => id 查询),因此您可以通过简单的where测试找到它。

您可以做的另一件事是设置content-disposition标头,它告诉浏览器文件如何识别自己;例如,如果用户尝试保存文件,将"content-disposition"标题设置为"inline;filename=imgnameetc.jpg" 可能会有所帮助;但是,它不会更改浏览器中显示的 url。

于 2013-03-13T12:01:12.210 回答
0

路由表必须配置为接受 URL 中的图像名称。无论您在哪里存储图像,都可以将名称与其一起存储。数据库中的单独列。

在 Global.asax 的 register routes 方法中,尝试编写这个。

  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。

于 2013-03-13T12:10:46.550 回答
0

看看下面的 URL,你可以在 MVC 路由器的帮助下实现这一点。只需添加一个特定于您的请求的路由器并为其配置 IIS。

带有名称和格式的图像

于 2013-03-13T12:18:37.753 回答