<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
public class ImageHandler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.Clear();
if (!String.IsNullOrEmpty(context.Request.QueryString["id"]))
{
int id = Int32.Parse(context.Request.QueryString["id"]);
// Now you have the id, do what you want with it, to get the right image
// More than likely, just pass it to the method, that builds the image
Image image = GetImage(id);
// Of course set this to whatever your format is of the image
context.Response.ContentType = "image/jpeg";
// Save the image to the OutputStream
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
}
else
{
context.Response.ContentType = "text/html";
context.Response.Write("<p>Need a valid id</p>");
}
}
public bool IsReusable
{
get
{
return false;
}
}
private Image GetImage(int id)
{
// Not sure how you are building your MemoryStream
// Once you have it, you just use the Image class to
// create the image from the stream.
MemoryStream stream = new MemoryStream();
return Image.FromStream(stream);
}
}
8条答案
按热度按时间lsmepo6l1#
最好创建一个返回图像的HttpHandler。然后将asp:Image上的ImageUrl属性绑定到HttpHandler的url。
下面是一些代码。
首先创建HttpHandler:
接下来,只需在使用asp:Image的aspx页面中调用它。
就是这样。
pw9qyyiw2#
处理程序可以像其他请求一样接受url参数,所以你不用把
<asp:image/>
链接到image.ashx
,而是把它设置为image.ashx?ImageID=[Your image ID here]
。pn9klfpd3#
我假设您需要从www.example.com生成动态图像asp.net,您可能运气不错http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16449
Hanselman最近在博客上写了这个
5t7ly7z54#
@威尔和本·格里斯沃尔德:请使用“image. ashx”而不是“image. aspx”。
它比完整的ASP.NET页更轻量级,并且它是专门设计来处理text/html以外的内容类型的。
vmjh9lq95#
虽然将MemoryStream数据绑定到图像是不可能的,但可以使用标签/GenericControl、一些代码和data URI scheme将图像嵌入到页面中,但这种方法存在严重问题:
缺点
更好的方法是使用一个单独的“Image.aspx”页面来获取和输出你的MemoryStream,有点像我在开始学习www.example.com时创建的相册软件ASP.net:
(Don't laugh, that was my first attempt at ASP.net :-)
编辑:同意ASHX,上面的代码只是展示一个示例实现。当我更新相册时,它将使用ASHX。
b5lpy0ml6#
您可以使用Telerik的BinaryImage控件来实现ASP.NET。
更多信息请点击这里:http://www.telerik.com/products/aspnet-ajax/binaryimage.aspx
798qvoo87#
没有。
但是你可以创建一个特殊的页面来流式传输图像,首先,你设置图像的URL到执行流式传输的页面,包括一些url参数,让你知道从哪里获取图像:
在GetImage.aspx中,您从URL获取文件名(或其他内容),将图像加载到MemoryStream中,然后将该内存流的内容直接写入HttpResponse:
wgmfuz8q8#
对我来说,有必要在@Page中添加“buffer=“false”。否则我会一直得到相同的图片...