3

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

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

未捕获任何异常,并且图像正确保存在路径中。

4

2 回答 2

6

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

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

更新:

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

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

我忽略了我们在谈论图像服务器控制

于 2012-07-24T21:33:07.367 回答
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 url 以指定应加载的图像。您还可以修改代码以动态生成图像或类似的东西。

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

Image1.ImageUrl = "getmyimage.ashx"

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

缓存 ASHX 图像响应

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

Image1.ImageUrl = "~/images/test.png"
于 2012-07-24T21:41:05.100 回答