C#图像库-图像按钮未显示

C#图像库-图像按钮未显示,c#,.net,asp.net,C#,.net,Asp.net,我正在为一个网站制作一个C#图像库(我知道有很多免费的,但我想体验一下)。我通过将文件存储在一个数组中,从网站的一个目录中获取文件 protected void Page_Load(object sender, EventArgs e) { string[] files = null; files = Directory.GetFiles(Server.MapPath(@"Pictures"),"*.jpg"); 然后我创建了一个ImageButto

我正在为一个网站制作一个C#图像库(我知道有很多免费的,但我想体验一下)。我通过将文件存储在一个数组中,从网站的一个目录中获取文件

protected void Page_Load(object sender, EventArgs e)
    {
        string[] files = null; 

        files = Directory.GetFiles(Server.MapPath(@"Pictures"),"*.jpg");
然后我创建了一个ImageButton数组(我将使用它作为缩略图),并将它们动态地添加到web表单上的一个面板中。但是,图像按钮已正确添加到表单上,但图片显示小正方形/圆形/三角形符号,无法加载实际图像

ImageButton[]arrIbs=新建ImageButton[files.Length-1]

for (int i = 0; i < files.Length-1; i++)
{
    arrIbs[i] = new ImageButton();
    arrIbs[i].ID = "imgbtn" + Convert.ToString(i);
    arrIbs[i].ImageUrl = Convert.ToString(files[i]);
    Response.Write(Convert.ToString(files[i]) + "**--**");
    arrIbs[i].Width = 160;
    arrIbs[i].Height = 100;
    arrIbs[i].BorderStyle = BorderStyle.Inset;
    //arrIbs[i].BorderStyle = 2;
    arrIbs[i].AlternateText = System.IO.Path.GetFileName(Convert.ToString(files[i]));
    arrIbs[i].PostBackUrl = "default.aspx?Img=" + Convert.ToString(files[i]);

    pnlThumbs.Controls.Add(arrIbs[i]);

}
for(int i=0;i
}


这可能与问题相关,也可能与问题无关(如果不相关,则为子问题)。将Server.MapPath()设置为@“~/Gallery/Pictures”(目录与站点根目录相关)时,我收到一个错误。它声明“C:/…/…/…/…/…/…/…/…找不到”只有当我将目录设置为“Pictures”(图片所在的位置)并且“Pictures”与上述代码所在的“Default.aspx”位于同一文件夹中时,网站才会生成。我对蒂尔达这个角色从来没有什么运气。这是文件结构问题还是IIS问题?

问题在于您正在将服务器上的路径设置为图像按钮源。浏览器将尝试从客户端计算机加载这些图像,因此无法加载。您还需要确保服务器上的ASPNET用户具有该文件夹的权限

您需要做的是将jpeg流作为图像按钮的源

您可以有一个aspx页面,它接受查询字符串参数中的路径,加载文件并为其提供服务

例如,有一个名为GetImage.aspx的页面:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>

<script runat="server" language="c#">
    public void Page_Load()
    {
        try
        {
            Response.Clear();
            Response.ContentType = "image/jpeg";
            string filename = Page.Request.QueryString["file"];
            using (FileStream stream = new FileStream(filename, FileMode.Open))
            {
                int streamLength = (int)stream.Length;
                byte[] buffer = new byte[streamLength];
                stream.Read(buffer, 0, streamLength);
                Response.BinaryWrite(buffer);
            }
        }
        finally
        {
            Response.End();
        }
    }
</script>

谢谢你的回答,我以后一定能用这个。然而,我遇到的问题是,当我在VisualStudio2008中设置网站时,我基于我的文件结构(文件),而不是我的IIS配置(HTTP)。因此,路径“/Images/Pic1.jpg”引用的是C:Drive,而不是我的Web root->Images->Pic1.jpg。@Veli,我最终使用了上面的代码。我不知道你可以将img源设置为实际的.aspx页面,我一直认为它必须是一个图片扩展。非常好,谢谢!很高兴为您提供帮助:)但如果我没有提到一种可能更优雅的处理方法是使用HttpHandler,那我就大错特错了:
arrIbs[i].ImageUrl = String.Format("GetImage.aspx?file={0}", HttpUtility.UrlEncode(files[i]));