【问题标题】:Display a Photo Gallery using Asp.Net and SQL使用 Asp.Net 和 SQL 显示照片库
【发布时间】:2009-04-06 12:49:28
【问题描述】:

我最近将照片添加到我的 SQL 数据库中,并使用 Asp:Image 将它们显示在 *.aspx 页面上。此控件的 ImageUrl 存储在单独的 *.aspx 页面中。它适用于个人资料图片。

我手头有一个新问题。我需要每个用户都能够拥有自己的照片库页面。我希望将照片存储在 sql 数据库中。存储照片并不难。问题是显示照片。我希望照片以缩略图网格方式存储,当用户单击照片时,它应该在单独的页面上显示照片。

最好的方法是什么。显然它不是使用 Asp:Image。我很好奇我是否应该使用 Gridview。如果是这样,我该怎么做?它们应该是为此存储在数据库中的缩略图大小吗?

点击图片后,点击其他页面的外观,以显示正确的图片。我认为通过 url 发送 photoId 是不正确的。

以下是我用来显示个人资料图片的页面中的代码。

protected void Page_Load(object sender, EventArgs e) {

 string sql = "SELECT [ProfileImage] FROM [UserProfile] WHERE [UserId] = '" + User.Identity.Name.ToString() + "'";

 string strCon = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SocialSiteConnectionString"].ConnectionString;
    SqlConnection conn = new SqlConnection(strCon);

 SqlCommand comm = new SqlCommand(sql, conn);

 conn.Open();

 Response.ContentType = "image/jpeg";

 Response.BinaryWrite((byte[])comm.ExecuteScalar());

 conn.Close();

}

【问题讨论】:

  • 有人这样做吗,或者有没有更好的方法来显示照片库。我的意思是我仍然希望将照片存储在 sql 中。

标签: asp.net sql photo image-gallery


【解决方案1】:

“此控件的 ImageUrl 存储在单独的 *.aspx 页面中。它适用于个人资料图片。” - 而不是 .aspx 页面,为什么不使用通用 ASP.NET 处理程序 (.ashx) 呢?它们比 .aspx 更轻量级。只需搜索“ASP.NET 通用处理程序”,您就会找到许多示例。它基本上是您现在在 .aspx 页面后面的代码,但没有所有页面初始化/渲染开销。

“我希望照片以缩略图网格方式存储,当用户单击照片时,它应该在单独的页面上显示照片。” - 我认为任何支持项目元素模板的 ASP.NET 可重复控件(例如 ASP.NET 3.5 中的 DataGrid、GridView、Repeater、ListView 等)都应该在这里为您解决问题。只需根据缩略图设置图像或 asp:Image 高度和宽度。将您在 HTML 锚点中使用的任何标记包装到您的页面,以“全尺寸”显示图像。

【讨论】:

  • +1 用于使用 ashx。还有很多关于图像处理程序 SO 的示例。
【解决方案2】:

让我们解构你的问题:

是否应该为此存储在数据库中的缩略图大小?
是的。在第一次请求照片缩略图时生成缩略图并将其缓存在数据库中以供将来访问

显然是不要使用 Asp:Image
使用 Asp:Image 没有问题。你会没事的

我很好奇是否应该使用 Gridview
也许Repeater更好,但如果您熟悉gridview,您会很好

我认为通过 url 发送 photoId 是不正确的。
这是正确的,但您应该检查照片是否属于当前用户(不要相信 URL。

生成缩略图
您将了解到 .net 生成的调整大小的图像质量很差。您应该使用一些 GDI 功夫来获得高质量的图片。 参考这篇文章http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/use-gdi-to-save-crystal-clear-gif-images-with-net.aspx了解更多

【讨论】:

    【解决方案3】:

    你可以试试thisthis。他们应该让你开始在电网方面。正确从 url 发送 imageid。查看会话变量或隐藏控件并发布表单并在下一页阅读。

    我会查看 gridview 并将模板列与 gridview 中的 html 图像标签结合使用。在他们上传缩略图时创建缩略图并将它们都存储在数据库中。从那里,您可以轻松地检索它。这种显示图像的方式更快,并且在显示时不需要缩略图转换。

    【讨论】:

      【解决方案4】:

      好吧,您将拥有一个仅显示照片的页面(就像您在上面那样),但您的标准会有所不同。您不会使用WHERE [UserId] = '" + User.Identity.Name,但必须为数据库中照片的 id 发送一个查询字符串 id。

      然后,当您想要在您的 aspx 页面中添加图片时,您必须放置一个图像 html 标签<image src="photo.aspx?id=2" />

      如何在页面上放置 html 图片标签并不重要。

      【讨论】:

        【解决方案5】:

        RbmBinaryImage 控件将帮助您直接显示数据库中的图像。您可以将 Image 字段直接绑定到 ImageContent 属性,也可以指定是否希望显示为缩略图并提供缩略图大小。

        要获得它去http://www.ramymostafa.com/?p=187

        【讨论】:

          【解决方案6】:

          如果您不想重新发明轮子,可以将诸如 Gallery Server Pro (www.galleryserverpro.com) 之类的开源画廊集成到您的网站中。它是用 C# / ASP.NET 编写的,可以做你想做的所有事情。

          罗杰

          [免责声明] 我是 Gallery Server Pro 的创建者和首席开发人员 [/disclaimer]

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-10-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多