【问题标题】:Setting an Image control source to an image in the server将 Image 控件源设置为服务器中的图像
【发布时间】:2012-07-24 21:30:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

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

    更新:

    正如 Graymatter 建议的那样:

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

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

    【讨论】:

    • 啊,呃。我应该知道的。非常感谢!
    • 你不应该这样硬编码路径。您无法保证您的网站将托管在盒子上的哪个位置(根/虚拟目录)。
    • @Graymatter - "~/images/test.png" 会起作用吗?如果没有,在这种情况下您会提出什么建议?
    【解决方案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 在 cmets 中指出的那样,您需要查看所需的缓存选项类型并进行设置。默认行为是始终发回图像而不是缓存它。如果你想缓存图片,你应该看看下面的帖子:

    Caching ASHX Image Response

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

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

    【讨论】:

    • 最后一行 +1 ;) 只是提到您应该设置缓存选项,否则浏览器会在每次用户重新加载页面或在另一个页面上使用相同的图像时询问您的图像.例如stackoverflow.com/questions/7560180/caching-ashx-image-response
    • @AntonioBakula 让我大吃一惊的一件事是写到网站文件夹。这真的很冒险,这就是为什么我用其他替代方案来解决这样的问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2013-02-13
    相关资源
    最近更新 更多