如何在SQL Server数据库中保存图像?

时间:2010-08-25 13:58:53

标签: c# .net sql-server asp.net-mvc image-uploading

我想将使用httppostedfilebase上传的图像保存到数据库中。

我该怎么做?如何构建数据库字段?我编写什么代码将其保存到数据库中?

4 个答案:

答案 0 :(得分:1)

if(uploadedImage == null || uploadedImage.ContentLength == 0)
{
    // no image
}

var image = new Image();
image.Name = uploadedImage.FileName;
image.ContentType = uploadedImage.ContentType;
int length = uploadedImage.ContentLength;
byte[] buffer = new byte[length];
uploadedImage.InputStream.Read(buffer, 0, length);
image.Data = buffer;

Image类是数据库实体,因此您需要在数据库中使用NameContentTypeDatauploadedImageHttpPostedFileBase

答案 1 :(得分:1)

我们使用数据类型varbinary(max)将图像和其他文件存储在SQL数据库中。

有关如何使用此数据类型的示例,请参阅:http://msdn.microsoft.com/en-us/library/a1904w6t(VS.80).aspx

答案 2 :(得分:1)

首先,将图像存储在数据库中是一个有争议的主题,因此请务必考虑这是否真的是您想要的。有关详细讨论,请参阅:

Storing Images in DB - Yea or Nay?

接下来要考虑的是使用什么技术。你会使用Linq2SQL,NHibernate,Entity Framework还是普通的ADO.NET?在选择技术时,您应该考虑整体应用程序架构,而不仅仅是关注存储图像(除非您的应用程序完全是这样)。一旦确定,请查看所选技术如何处理二进制数据。

您可以通过HttpPostedFileBase.InputStream获取二进制数据。

答案 3 :(得分:1)

[HttpPost]
    public ActionResult SaveImage(HttpPostedFileBase image)
    {
       Foo foo=new Foo();
       if (image != null)
            {
                foo.ImageMimeType = image.ContentType;//public string ImageMimeType { get; set; }
                foo.ImageData = new byte[image.ContentLength];//public byte[] ImageData { get; set; }
                image.InputStream.Read(product.ImageData, 0, image.ContentLength);
            }
            fooRepository.Save(foo);
        }
    }