将varbinary显示为可下载的链接

时间:2012-10-27 21:29:42

标签: c# asp.net sql-server

相当简单的问题,我将图像存储在我的数据库中作为varbinary,并希望提供这些图像的链接,而不是在网站上显示它们。当用户点击链接时,他/她应该能够下载图像。

3 个答案:

答案 0 :(得分:3)

响应请求提供图像。

<img src="?" /> <!-- what goes here? -->

您需要创建一个HTTP handler来接收这些图片的请求。

处理程序是特定URL上可用的可执行文件,可以响应您的请求;在这种情况下,通过提供图像的二进制数据。 ASPX页面是一个有效的处理程序,尽管图像有更高效的处理程序类型。

<img src="MyHandler.aspx?imageId=123" />

处理程序应该做一些事情:

  • 验证ID是否有效以及调用者是否具有权限(如果需要)
  • 从数据库中检索图像
  • 设置适当的响应标头
  • 使用Response.BinaryWrite()将二进制数据发送给客户端。

请注意,如果您使用的是ASP.Net MVC,则可以使用控制器作为处理程序。

另一种方法是基于64对字节进行编码并将它们直接嵌入图像标记中。

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot">

对于小图像或多个请求的费用非常高,这是一种非常有用的技术。

请参阅:http://en.wikipedia.org/wiki/Data_URI_scheme

更多阅读:

答案 1 :(得分:0)

您应该创建一个采用image-id并返回图像的页面。

答案 2 :(得分:0)

您可以考虑这个问题:

Display image from a datatable in asp:image in code-behind

我有一个类似的问题,答案解决了我的问题。除此之外,您还可以使用Telerik的binaryimage组件:

http://www.telerik.com/products/aspnet-ajax/binaryimage.aspx