将Image控件源设置为服务器中的图像

时间:2012-07-24 21:30:12

标签: c# asp.net

我正在尝试在我的Image控件上显示图像,但它无效。我基本上将它用作屏幕截图预览。我将位图保存到服务器路径中的Images文件夹,然后将控件的ImageUrl设置为保存的图像位置。这是我的代码。此代码在按钮单击时执行:

img.Save(Server.MapPath("~/Images/") + "test.png", ImageFormat.Png);
Image1.ImageUrl = Server.MapPath("~/Images/") + "test.png";
Image1.DataBind();

没有捕获异常,图像在路径中正确保存。

2 个答案:

答案 0 :(得分:6)

您不能将Server.MapPath用于URL,更改为此(假设images文件夹位于应用程序的根文件夹中):

Image1.ImageUrl = "/images/test.png";

更新:

正如Graymatter建议的那样评论应该是:

Image1.ImageUrl = "~/images/test.png";

我忽略了我们所说的图像服务器控件

答案 1 :(得分:2)

链接直接写入应用程序中的Web文件夹绝不是一个好主意。我宁愿去创建一个ashx处理程序并回流图像。你可以创建一个看起来像这样的文件(例如getmyimage.ashx.cs):

using System;
using System.Web;

public class getmyimage : IHttpHandler 
{
  public void ProcessRequest(HttpContext context)
  {
        Response.ContentType = "image/png";
        Response.WriteFile("x:\myimages\test.png");
        Response.End();
  }

  public bool IsReusable 
  {
    get 
    {
      return false;
    }
  }
}

getmyimage.ashx将包含以下内容:

<% @ webhandler language="C#" class="getmyimage" %>

在此代码中,“x:\ myimages \ test.png”将是您要流回浏览器的图像。您可以向getmyimage.ashx网址添加参数,以指定应加载哪个图像。您还可以修改代码以动态生成图像或沿着这些行生成图像。

然后,您可以指向图片网址中的“getmyimage.ashx”。所以你的imageurl看起来像这样:

Image1.ImageUrl = "getmyimage.ashx"

正如Antonio在评论中指出的那样,您需要查看所需的缓存选项类型并进行设置。默认行为是始终发送回图像而不是缓存它。如果要缓存图像,则应查看以下帖子:

Caching ASHX Image Response

要直接映射到问题中的图像,您可以使用:

Image1.ImageUrl = "~/images/test.png"