从数据库在ASP.NET(3.5)网页上显示图像
我是ASP.NET新手。我正在用ASP.NET 3.5(VS 2008)开发一个网站,我想做的就是:从数据库在ASP.NET(3.5)网页上显示图像,asp.net,Asp.net,我是ASP.NET新手。我正在用ASP.NET 3.5(VS 2008)开发一个网站,我想做的就是: 将图像上载到服务器(我通过FileUpload控件执行此操作) 将数据库中的字节(字节[])保存到某个表中 当用户调用一个页面时,比如Index.aspx?id=10,然后我转到一个表,拉取id=10的相关行,其中一个单元格的图像为byte[]格式 我现在想在网页上显示这张图片,还有其他东西 我似乎不知道怎么做-图像控件只需要一个URL,我不想将图像保存在磁盘上 有什么想法吗 -Rick看一看:
-Rick看一看:您需要创建一个实现IHttpHandler接口的类。这样的东西应该足够了:
public class ImageHttpHandler : IHttpHandler
{
//code omitted
public bool IsReusable
{
get
{
return (false);
}
}
public void ProcessRequest(HttpContext context)
{
//GetImageUrl is implemented elsewhere
var imageURL = GetImageUrl(context.Request.Params["URL"]);
//GetImageContentFromDatabase returns a structure with MIMEType and Content properties
var imageData = GetImageContentFromDatabase(imageURL);
if(imageData != null)
{
context.Response.ContentType = imageData.MIMEType;
context.Response.BinaryWrite(imageData.Content);
}
else
{
context.Response.StatusCode = 404;
}
}
}
您可以将此类放置在App_代码目录中,或者,如果您想概括此行为,可以将其放置在单独的程序集中
然后,您可以在web.config文件中引用此处理程序,如下所示:
<system.web>
<httpHandlers>
<add verb="GET" path="*.imgx" type="ImageHttpHandler"/>
</httpHandlers>
</system.web>
这意味着对扩展名为imgx的文件的所有get请求都应定向到类ImageHttpHandler
这将与Cassini(VisualStudioDevelopmentWeb服务器)配合使用,但您需要对IIS网站/虚拟目录进行额外更改
转到IIS MMC管理单元并访问此目录的属性。您需要找到位于“虚拟目录”或“主目录”选项卡中的配置按钮。到达后,添加imgx作为应用程序扩展,将可执行文件设置为aspnet_isapi.dll。它位于我的计算机上,位于C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727。为简单起见,选择“所有动词”,并取消选中“验证文件是否存在”
您在网页中定义的超链接应使用imgx扩展。根据您的需要,您可以将链接定义为“myimage.imgx”或“GetImage.imgx?id=XXX”。这取决于您的需要以及您打算如何从数据库检索图像内容。回答得很好,谢谢David和Canavar。仔细考虑后--我想知道我是否应该省去麻烦,改用文件系统。@rick s:文件系统会更简单,但数据库方法有两种选择:(1)你不必担心网络环境中的权限问题,(2)你可以对发送回来的内容耍花招(例如,调整图像大小、应用效果等),(3)只要能够以编程方式影响响应缓存设置,从而从用户的浏览器缓存而不是服务器的缓存中提供重复请求,就可以提高性能。