2013-03-13 72 views
0

我使用下面的函数在asp.net mvc的显示byte []数组图像如何使用名称和格式显示byte []数组图像?

 public ActionResult Images(int id) 
     { 
      byte[] imageData = GetImage(id); 

      string contentType = "image/jpeg"; 

      return File(imageData, contentType); 
     } 

     <img src="/Home/Images/2"> 

所以问题是这样的,我不希望显示/主页/图片/ 2。我想告诉像这样

 > /Home/Images/imgnameetc.jpg 

注意图像格式的任何随机名称: 我有图像只是byte []数组form.No如姓名的任何其他信息,图像格式

我没有搜索就可以了但我找不到任何解决方案

请帮忙。

+1

你谈论你导航到* URL *?或*如果保存的文件如何识别自身*?他们是2种不同的东西... – 2013-03-13 11:56:59

+0

这是可能的,但如果你想传递任何随机的名字,那么你将如何跟踪图像ID和获取特定图像的字节? – 2013-03-13 12:15:54

回答

1

您的服务器端代码无法欺骗用户导航到的网址。如果他们导航到/Home/Images/2,那么这就是网址。你可以做的是让他们导航到/Home/Images/imgnameetc.jpg而不是/Home/Images/2,但你需要配置路由允许名称,而不是一个id,并有一个地方你可以从名称查找细节(/ slug )而不是从一个id。例如,您的数据库中可能有一个索引为UrlSlug的列(我建议使用唯一且非集群的方式,对非空值进行限制,并将该ID作为附加的包含值(不是索引的一部分,你可以做,但可以蛞蝓=> ID查询),其中包含imgnameetc.jpg该记录,这样你就可以用一个简单的where测试发现它。

的另一件事是设置内容处置头,告诉浏览器如何识别文件本身;例如,将"content-disposition"标题设置为"inline;filename=imgnameetc.jpg"可能帮助如果用户试图保存该文件;但是,它可以帮助不会更改浏览器中显示的网址。

+0

这两个解决方案都是有效的,但我不能改变数据库now.is有任何其他方式来做到这一点。 – 2013-03-13 12:11:44

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。

+0

同样的解决方案:) – 2013-03-13 12:19:20

0

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

Image with name and format

相关问题