Database: image file as blob or file path?

后端 未结 3 641
北荒
北荒 2021-01-20 23:54

I know this question has been asked any a times.

I read this whole post but still couldn\'t reach to a point.

I am making a website which will allow users to do

3条回答
  •  孤独总比滥情好
    2021-01-21 00:29

    I found another good answer by KBrocksi_SEC in forum.asp.net, so i share it with you:

    A commonly used alternative approach to handling BLOB data is to store the BLOB data in the file system, and store a pointer (preferably a Uniform Resource Locator [URL] link) in a database column to reference the appropriate file.

    Advantages of Storing BLOB Data in the Database

    Storing BLOB data in the database offers a number of advantages:

    • It is easier to keep the BLOB data synchronized with the remaining items in the row.
    • BLOB data is backed up with the database. Having a single storage system can ease administration.
    • BLOB data can be accessed through XML support in SQL Server 2005, which can return a base 64–encoded representation of the data in the XML stream.
    • SQL Server Full Text Search (FTS) operations can be performed against columns that contain fixed or variable-length character (including Unicode) data. You can also perform FTS operations against formatted text-based data contained within image fields—for example, Microsoft Word or Microsoft Excel documents.

    Disadvantages of Storing BLOB Data in the Database

    Carefully consider what resources might be better stored on the file system rather than in a database. Good examples are images that are typically referenced via HTTP HREF. This is because:

    • Retrieving an image from a database incurs significant overhead compared to using the file system.
    • Disk storage on database SANs is typically more expensive than storage on disks used in Web server farms.

    The following code shows how to use ADO.NET to write binary data obtained from a file to an image field in SQL Server.

    public void StorePicture( string filename )
    {
      // Read the file into a byte array
      using(FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
      {
        byte[] imageData = new Byte[fs.Length];
        fs.Read( imageData, 0, (int)fs.Length );
      }
    
    
      using( SqlConnection conn = new SqlConnection(connectionString) )
      {
        SqlCommand cmd = new SqlCommand("StorePicture", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@filename", filename );
        cmd.Parameters["@filename"].Direction = ParameterDirection.Input;
        cmd.Parameters.Add("@blobdata", SqlDbType.Image);
        cmd.Parameters["@blobdata"].Direction = ParameterDirection.Input;
        // Store the byte array within the image field
        cmd.Parameters["@blobdata"].Value = imageData;
        conn.Open();
        cmd.ExecuteNonQuery();
      }
    }
    

    Also i can add another notes to the above explanations myself:

    Disadvantages of Storing BLOB Data in the Database

    • If your BLOB Data cause a heavy database (when you store many files in DB) then the database backup process maybe take more time to complete and cause headaches for you.

提交回复
热议问题