在asp.net中保存图像的正确方法是什么?

时间:2013-02-28 00:00:42

标签: asp.net sql-server image save

在我的系统中,有一个功能可以保存添加的项目的图像,我所做的是将图像的文件名保存到SQL服务器中,并将图像保存到其中一个文件夹中asp.net

这里是我在sql server中保存图像文件名的代码:

INSERT INTO schemaImage.Image(image_name) VALUES ('image1.FileName')

这是我将图像保存到文件夹中的代码:

image1.SaveAs(Server.MapPath("Images/" + image1.FileName))

是否可以将图像保存到数据库中?

在这里保存图像更合适吗?

3 个答案:

答案 0 :(得分:1)

  1. 是的,可以在SQL Server中将图像另存为二进制类型。

    Details:  http://www.asp.net-crawler.com/articles/ADO.Net/Storing-binary-blob-data-images-files-SQL-server-ADONet.aspx

  2. 保存图像的正确方法取决于您的应用程序的要求:例如 如果您需要经常修改图片并且它们很大,那么将它们保存在文件系统中更合适,因为它可以更好地处理碎片。 Even more details..

答案 1 :(得分:0)

您需要将图像转换为字节以将其存储在数据库中。您可以将IO.File.ReadAllBytes()用于本地文件,也可以将Net.WebClient.DownloadData()用于网络文件。 IMAGE数据类型将在SQL Server中消失,因此请使用VARBINARY(MAX)来存储它。

代码:

Dim url As String = "http://example.com/image.png",
    file As String = "c:\image.png"

Using connection As New Data.SqlClient.SqlConnection("your connection string"),
    saveImage As New Data.SqlClient.SqlCommand("dbo.saveImage", connection)

    connection.Open()
    saveImage.CommandType = Data.CommandType.StoredProcedure

    'use only one of these
    saveImage.Parameters.AddWithValue("@imageData", New Net.WebClient().DownloadData(url)) 'get file from url
    'saveImage.Parameters.AddWithValue("@imageData", IO.File.ReadAllBytes(file)) 'get file locally

    saveImage.ExecuteNonQuery()

End Using

步骤:

CREATE PROCEDURE [dbo].[saveImage] ( @imageData AS VARBINARY(MAX) )
AS
INSERT INTO dbo.myImage ( imageData ) VALUES ( @imageData )

表:

CREATE TABLE [dbo].[myImage](
    [imageData] [varbinary](max) NOT NULL
) 

答案 2 :(得分:0)

当然,您可以在SQL Server中存储图像数据,有varbinary和image等数据类型来存储图像数据。您可以在此link找到有关这些类型使用的详细信息。但在此之前,您必须阅读Storing images in SQL Server?以决定是否将图像存储在数据库中。