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

问题描述:

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

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

没有发现任何异常,并且图像在路径中正确保存。

不能使用为使用Server.Mappath URL的,改变这种(假设图像文件夹在您的应用程序的根文件夹):

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

更新:

由于Graymatter建议IH评论认为应该是:

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

我忽视的是,我们正在谈论的图像服务器控件

+0

啊,真不错。我应该知道这一点。谢谢一堆! – tareqx3 2012-07-24 21:34:46

+0

你不应该像这样硬编码路径。您无法保证您的网站将托管在框(根/虚拟目录)上。 – Graymatter 2012-07-24 21:34:56

+0

@Graymatter - 会“〜/ images/test.png”而不是?如果不是,在这种情况下你会提出什么建议? – 2012-07-24 21:39:19

链接直接写入应用程序中的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" 

安东尼奥在评论中指出的,你需要看看你想要的缓存选项的类型和设置。默认行为是始终发送图像,而不是缓存它。如果你希望缓存的形象,你应该看看下面的帖子:

Caching ASHX Image Response

直接映射到问题的图像,你可以使用这个:

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

+1)最后一行;只需提及您应设置缓存选项,或者每次用户重新加载页面或在另一页上使用相同图像时,浏览器都会询问您的图像。例如http://*.com/questions/7560180/caching-ashx-image-response – 2012-07-24 22:10:18

+0

非常好的一点,我会修改帖子以包含它。 – Graymatter 2012-07-24 22:15:13

+0

@AntonioBakula有一件令我恐惧的生活大事正在写入网站文件夹。这是非常危险的,这就是为什么我会用其他替代方法来解决像这样的问题:) – Graymatter 2012-07-24 22:19:33