4

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

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

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

只是想看看最好的方法。

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

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" />
4

4 回答 4

4

两种选择:

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

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

编辑

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

编辑

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

于 2009-03-04T20:48:04.200 回答
0

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

于 2009-03-04T22:56:08.650 回答
0

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

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

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

如果您需要帮助,支持是免费且快速的。

于 2011-12-01T03:21:40.977 回答
-1

是一些有关如何执行此操作的示例代码。

于 2009-03-04T20:46:19.570 回答