如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?

Posted

技术标签:

【中文标题】如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?【英文标题】:How is better save and load a picture on c# (asp.net) and SQL Server? 【发布时间】:2011-07-08 01:08:35 【问题描述】:

我想保存图片,并在网格视图中显示它们的名称、描述、价格和其他内容,但我不知道该怎么做。首先,我应该如何上传图片?我目前正在使用 Windows 窗体应用程序来保存其他信息,但我现在还需要保存图像。这些图像需要从 ASP.NET 应用程序的网页中查看。

我认为我不需要保存路径,因为其他用户将通过他们计算机上的网页加载它。在数据库varbinaryimage 中使用的最佳格式是什么。我不确定如何使用这些或如何使它们在网格视图中可见。如果我有图像的路径,我确实知道该怎么做,但如果图像在数据库中,我就不知道了。

谁能告诉我如何将图像存储在数据库中,然后在网格视图中显示?

【问题讨论】:

很抱歉,这个问题写的让我头疼。即使英语不是您的第一语言,如果您希望得到高质量的答案,请花时间以合乎逻辑和连贯的方式提出您的问题。 关于 varbinary 和 image 区别的解释,请参见:***.com/questions/4113294/… 【参考方案1】:

如果你想将它存储在数据库中,你应该使用varbinary。它在功能上等同于image 列类型,但image 已被弃用,取而代之的是varbinary(MAX)。通常,要使用数据库中的图像,您需要创建一个 HttpHandler(或者,如果使用 ASP.NET MVC,则为控制器/动作)来处理对与图像关联的标识符进行编码的 url,例如,http://www.example.com/imagehandler.ashx?id=42。在这种情况下,处理程序会知道在数据库中找到 ID 为 42 的图像,并从对应于具有正确 MIME 类型的列内容的字节数组中构造一个响应。

示例代码:完全未经测试

public class ImageHandler: IHttpHandler

    public void ProcessRequest (HttpContext context)
    
         int imageID = -1;
         if (context.Request.QueryString["id"] == null || !int.TryParse( context.Request.QueryString["id"], out imageID) ) 
         
             throw new ArgumentException("Invalid or missing image id.");
         

         using (var context = new ImagesDataContext())
         
              var image = context.Images.SingleOrDefault( i => i.ID == imageID );
              if (image != null)
              
                   context.Response.ContentType = image.MimeType;
                   context.Response.BinaryWrite( image.Content );
              
              else
              
                  // decide how you want to handle an image that isn't found
              
         

    

    public bool IsReusable
    
        get  return false; 
     

【讨论】:

以上是关于如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net (C#) & SQL Server - 或者 - PHP & MySQL 的性能? [关闭]

如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?

如何使用 C# 从 ASP.NET 中的 SQL Server 数据库中检索和显示 GridView 中的值

如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中

如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期

如何从asp.net中的js函数调用c#函数?