【问题标题】:What's the best way to display an image from a sql server database in asp.net?在 asp.net 中显示来自 sql server 数据库的图像的最佳方法是什么?
【发布时间】:2010-10-11 08:55:52
【问题描述】:

我有一个返回图像字节的 sql 服务器数据库。如果我使用 tableadapter 向导并将其设置为我的存储过程和预览数据,它会拉回图像。它会自动将其转换为预览数据中的图像。我不认为它是一串 Ints 或任何东西。

如何使用 gridview 和 objectdatasource 在我的 asp.net 网页上显示它?

我已经搜索并发现图像字段可以指向另一个页面上执行字节转换的 url,但我不确定它是最好的。我找到了另一种创建临时文件的方法。

只是想看看最好的方法。

edit - 我试图不使用临时文件。如果我不能使用网格视图,则可以使用常规图像字段。

asp.net 2.0,c#。

感谢您的帮助。

编辑

结果:

   protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request["id"];
        string connstr = "DSN=myserver";
        OdbcConnection conn = new OdbcConnection(connstr);
        OdbcCommand cmd = new OdbcCommand("{call mySP (?)}", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        OdbcParameter parameter = new OdbcParameter();
        parameter.ParameterName = "@MyParam";
        parameter.OdbcType = OdbcType.VarChar;
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = id;

        // Add the parameter to the Parameters collection. 
        cmd.Parameters.Add(parameter);
        conn.Open();
        OdbcDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            byte[] buffer = (byte[])dr[0];
            Response.ContentType = "image/jpg";
            Response.BinaryWrite(buffer);
            Response.Flush();
        }
    }

调用页面上的这个:

<asp:Image ID="Image1" ImageAlign="Middle" ImageUrl="show.aspx?id=123" Runat="server" />

【问题讨论】:

    标签: asp.net sql-server image blob


    【解决方案1】:

    两种选择:

    创建一个临时文件 - 这种方法的问题是您必须创建文件,这意味着您的 Web 必须具有对目录的写入权限,这不是一件好事。您还需要有一种方法来清理图像。

    从另一个 URL 提供它 - 这是我的首选方法,因为您不需要访问磁盘。一个简单的 http 处理程序 (ashx) 是提供图像的好方法。

    编辑

    如果您需要 ashx 中的会话状态,请查看:Asp.net System.Web.HttpContext.Current.Session null in global.asax

    编辑

    结合更多想法。在某些情况下,使用临时文件可能会更好。例如,如果很多用户经常请求您的图像。然后将图像存储在磁盘上是有意义的,因为您可以编写一次文件,这确实增加了维护复杂性,但根据流量,这可能是值得的,因为这可以让您避免回调到 .net 堆栈并利用 IIS静态内容的缓存。

    【讨论】:

    • 是我从另一个网址提供服务的意思吗?
    • 有点像。我会使用 ASHX 页面而不是 aspx 页面。您避免了创建页面的开销,如果调用很多,就会很重要。
    • 谢谢。我以前没听说过 ashx 页面。
    • 没问题,它是一种创建 HTTP 处理程序的简单方法
    【解决方案2】:

    我为open-source ImageResizing.Net library 编写了SqlReader 插件,以允许您以最优化性能的方式提供和显示来自SQL 数据库的图像。

    即使您不需要进行任何图像处理,它仍然是 (a) 最简单的 (b) 最有效的方法。您可以将它与磁盘缓存(提供自动清理)结合使用,以获得可能的最佳性能。

    Installation 很简单 - 2 个 nuget 命令,或者复制并粘贴到 Web.Config,任您选择。

    如果您需要帮助,support 免费且快捷。

    【讨论】:

      【解决方案3】:

      您添加的示例代码很好,但您应该将其移至用于此类事情的 .ashx 文件。

      【讨论】:

        【解决方案4】:

        Here 是一些关于如何做到这一点的示例代码。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-08
          • 2010-09-18
          • 2021-01-17
          • 2010-10-19
          • 2019-10-04
          相关资源
          最近更新 更多