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

时间:2009-11-18 06:05:35

标签: c# .net asp.net

我正在为一个网站制作一个C#图像库(我知道那里有许多免费的,但我想要的经验)。我通过将它们存储在一个数组中来从网站上的目录中获取文件。

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

        files = Directory.GetFiles(Server.MapPath(@"Pictures"),"*.jpg");

然后我创建了一个Imagebuttons数组(我将用作拇指指针),我将它们动态添加到Web表单的面板中。但是,图像按钮正确添加在窗体上,但图片显示小方块/圆/三角形符号,无法加载实际图像。

ImageButton [] arrIbs = new 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]);

}

}

这可能与问题有关,也可能与此无关(如果不相关,则是一个子问题)。将Server.MapPath()设置为@“〜/ Gallery / Pictures”(这是目录与站点根目录相关的位置)时出现错误。它声明“无法找到”C:/ ... / ... / ... / ...“如果我将目录设置为”图片“(图片所在的位置),网站只会构建,和“图片”与上述代码所在的“Default.aspx”位于同一文件夹中。我从来没有对〜(tilda)角色好运。这是文件结构问题还是IIS问题?

1 个答案:

答案 0 :(得分:3)

问题在于您在服务器上设置路径作为图像按钮源。浏览器将尝试从客户端的计算机加载这些图像,因此无法加载。您还需要确保服务器上的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>

现在当你创建ImageButtons时,这应该是你的ImageUrl:

arrIbs[i].ImageUrl = String.Format("GetImage.aspx?file={0}", HttpUtility.UrlEncode(files[i]));