【问题标题】:C# Image Gallery - Image Button Not ShowingC# 图像库 - 图像按钮不显示
【发布时间】:2009-11-18 16:14:28
【问题描述】:

我正在为网站制作 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 问题?

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

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

    【讨论】:

    • 谢谢楼上的回答,以后肯定能用上这个。然而,我遇到的问题是,当我在 Visual Studio 2008 中设置网站时,我基于我的文件结构 (FILE) 而不是我的 IIS 配置 (HTTP)。因此,路径“/Images/Pic1.jpg”指的是 C: Drive 而不是我的 Web 根目录 -> 图片 -> Pic1.jpg。
    • @Veli,我最终使用了上面的确切代码。我不知道您可以将 img 源设置为实际的 .aspx 页面,我一直认为它必须是图片扩展名。效果很好,谢谢!
    • 很高兴为您提供帮助 :) 但如果我没有提到使用 HttpHandler 可能更优雅的处理方式,我会错过:dotnetperls.com/ashx-handler
    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2014-05-07
    • 2023-03-12
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多