将图像控件源设置为服务器中的图像
我试图在图像控件上显示图像,但它不起作用。我基本上使用它作为屏幕截图预览。我将位图保存到服务器路径中的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";
我忽视的是,我们正在谈论的图像服务器控件
链接直接写入应用程序中的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"
安东尼奥在评论中指出的,你需要看看你想要的缓存选项的类型和设置。默认行为是始终发送图像,而不是缓存它。如果你希望缓存的形象,你应该看看下面的帖子:
直接映射到问题的图像,你可以使用这个:
Image1.ImageUrl = "~/images/test.png"
+1)最后一行;只需提及您应设置缓存选项,或者每次用户重新加载页面或在另一页上使用相同图像时,浏览器都会询问您的图像。例如http://*.com/questions/7560180/caching-ashx-image-response – 2012-07-24 22:10:18
非常好的一点,我会修改帖子以包含它。 – Graymatter 2012-07-24 22:15:13
@AntonioBakula有一件令我恐惧的生活大事正在写入网站文件夹。这是非常危险的,这就是为什么我会用其他替代方法来解决像这样的问题:) – Graymatter 2012-07-24 22:19:33
啊,真不错。我应该知道这一点。谢谢一堆! – tareqx3 2012-07-24 21:34:46
你不应该像这样硬编码路径。您无法保证您的网站将托管在框(根/虚拟目录)上。 – Graymatter 2012-07-24 21:34:56
@Graymatter - 会“〜/ images/test.png”而不是?如果不是,在这种情况下你会提出什么建议? – 2012-07-24 21:39:19