0

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

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

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

4

1 回答 1

3

如果要将其存储在数据库中,则应使用varbinary. 它在功能上等同于image列类型,但image已弃用,取而代之的是varbinary(MAX). 通常,要使用数据库中的图像,您需要创建一个 HttpHandler(如果使用 ASP.NET MVC,则创建一个控制器/动作)来处理对与图像关联的标识符进行编码的 url,例如http://www.example.com/imagehandler.ashx?id=42. 在这种情况下,处理程序会知道42在数据库中找到具有 id 的图像,并从对应于具有正确 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; }
    } 
}
于 2011-07-08T01:21:40.710 回答