Cara menggunakan mysql blob

Tadi nya sistem loading tipe field gambar dari database mysql itu saya stream dulu ke file baru di load ke vb.net, cuma cara ini sering jadi error, file terkunci saat file temporary hendak di tulis ulang.

Trik tersebut saya ikuti dari situs mysql lupa link yang mana, entah kenapa saya muter muter nyari solusi kok ga ada yang menjelaskan secara sederhana cara loading ini, untungnya ada yang mau menjelaskan di situs stackoverflow tapi tetep saja caranya muter dan ribet  berikut cara saya yang simpel untuk saving gambar dan loading lagi

Secara singkat, saya punya tabel "tuser" dengan kolom nama dan foto, tipe nama itu varchar, dan foto adalah mediumblob, untuk bisa jalan set dulu conn dengan koneksi mysqlnya (mysqlconnection) dan "Imports MySql.Data.MySqlClient" di header file vb

conn di set saat login dengan setting sebagai berikut :

connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false; Allow Zero Datetime=true;default Command Timeout=60; ", txtServer.Text, txtUser.Text, txtPassword.Text, txtDatabase.Text)
conn = New MySqlConnection(connStr)

Selanjutnya, untuk penyimpanan gambar ke blob, adalah

    Private Sub SaveGambar(ByVal namanya As String)
        Dim cmd As New MySqlCommand
        Dim SQL As String
        Dim FileSize As UInt32
        Dim rawData() As Byte
        Dim fs As FileStream
        Try
            fs = New FileStream(namafilefoto, FileMode.Open, FileAccess.Read)
            FileSize = fs.Length
            rawData = New Byte(FileSize) {}
            fs.Read(rawData, 0, FileSize)
            fs.Close()
            fs.Dispose()


            SQL = "update tuser set foto = @File where nama = '" + namanya + "'"
            cmd.Connection = conn
            cmd.CommandText = SQL
            cmd.Parameters.AddWithValue("@File", rawData)
            cmd.ExecuteNonQuery()
        Catch ex As Exception
            MessageBox.Show("There was an error: " & ex.Message, "Error", _
                MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Dan untuk loading lagi nya


    Private Sub LoadGambar(ByVal namanya As String)
        Dim myData As MySqlDataReader
        Dim SQL As String
        Try
            PictureBox1.Image = Nothing
            SQL = "SELECT foto FROM tuser where nama = '" + namanya + "' limit 1"
            Dim cmd As New MySqlCommand(SQL, conn)
            myData = cmd.ExecuteReader

            While myData.Read()
                Dim Byted() As Byte = myData.Item("foto")
                Dim Streamed As New System.IO.MemoryStream(Byted)
                PictureBox1.Image = Image.FromStream(Streamed)
                Streamed.Close()
            End While
            myData.Close()
            cmd.Dispose()
        Catch ex As Exception
            MessageBox.Show("There was an error: " & ex.Message, "Error", _
             MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub


Silakan dibandingkan dengan yang stackoverflow, walaupun ide bukan dari saya, tapi sepertinya yang saya tulis lebih simple, dan mudah dipahami, semoga berguna...

Cara untuk insert/update/view (menyimpan/mengubah/menampilkan) file biner pada MySQL adalah sebagai berikut.

Struktur database MySQL contoh nya kita beri nama tabel “file_attachment”, sebagai berikut:
Copy paste pada tools MySQL Administrasi Anda, seperti phpmyadmin.

PHP

1

2

3

4

5

6

7

8

CREATE TABLE IF NOT EXISTS `file_attachment` (

  `id` bigint(20) NOT NULL auto_increment,

  `file_content` mediumblob NOT NULL,

  `file_name` varchar(255) NOT NULL,

  `file_type` varchar(255) NOT NULL,

  `file_size` bigint(20) NOT NULL default '0',

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Untuk Insert Script nya adalah sbb.:
Beri nama file insert_blob.php (hanya contoh).

PHP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// CONECT DATABASE

@mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE");

@mysql_select_db("nama_database") OR die ("CONNECTED, BUT NO DATABASE");

 

if($_POST[submit]){

    $file_name = $_FILES['file']['name'];

    $tmp_name  = $_FILES['file']['tmp_name'];

    $file_size = $_FILES['file']['size'];

    $file_type = $_FILES['file']['type'];

    $fp = fopen($tmp_name, 'r');

    $file_content = fread($fp, $file_size) or die("Error: cannot read file");

    $file_content = mysql_real_escape_string($file_content) or die("Error: cannot read file");

    fclose($fp);

 

    // INSERT

    $qu = "INSERT INTO `file_attachment`

                (`file_content`,`file_name`,`file_type`,`file_size`)

                VALUES

                ('".$file_content."','".$file_name."','".$file_type."','".$file_size."')";

$re = mysql_query($qu) or die ("Sorry Cant insert db!");

echo $file_name." inserted succesfully to database";

}

echo '

';

echo ' ';

echo ' ';

echo '';

?>

Untuk menampilkan File dari BLOB, menggunakan 2 file, file pertama adalah sebagai berikut:
Beri nama file view_blob.php (hanya contoh).

PHP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// CONECT DATABASE

@mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE");

@mysql_select_db("nama_database") OR die ("CONNECTED, BUT NO DATABASE");

 

$id = $_REQUEST['id'];

$query = "SELECT * FROM `file_attachment` WHERE `id`='".$id."' LIMIT 1";

$qu = mysql_query($query);

$num = mysql_numrows($qu);

if($num > 0) {

$result=mysql_fetch_object($qu);

header("Content-Disposition: attachment; filename=".jin_gfile($result->file_name.""));

header("Content-length: ".$result->file_size."");

header("Content-type: ".$result->file_type."");

echo $result->file_content;

} else {

echo "File tidak valid!";

}

?>

berikut tambahan fungsi jin_gfile, supaya nama file tidak ada karakter aneh (boleh disatukan dalam file view_blob.php).

PHP

1

2

3

4

5

6

7

// CLEAN FILENAME

function jin_gfile($txt) {

$txt = preg_replace("/[^a-zA-Z0-9s.]/", "_", trim($txt));

return $txt;

}

?>

Berikutnya file kedua untuk view, adalah sbb bergantung kebutuhan:
– Untuk File Download (file umum), kita asumsikan pada data di MySQL sudah ada id 9 yang isinya adalah file document laporan ber ekstensi .doc atau .xls

PHP

1

<a href="http://namadomain/view_blob.php?id=9">File Laporan Bulan Maret 2010 (klik untuk download)</a>

– Untuk menampilkan gambar, kita asumsikan pada data di MySQL sudah ada id 3 yang isinya adalah file gambar ber ekstensi .jpg, .gif atau .png

PHP

1

<img src="http://namadomain/view_blob.php?id=3" alt="Gambar Alumni 1996">

Catatan PENTING: jika memungkinkan disarankan untuk tidak memilih menyimpan file biner kedalam struktur storage tabel database MySQL, melainkan lebih baik menyimpan file system.

Tipe data BLOB untuk apa?

Karena sifatnya yang tersimpan secara binary, maka tipe data BLOB ini dapat digunakan untuk menyimpan data multimedia, seperti gambar dan musikk kedalam tabel MySQL.

Apa itu Image BLOB?

Sederhananya BLOB adalah suatu cara yang digunakan untuk menyimpan file – file media seperti jpg, mp3, flv, mp4, dll, ke dalam database.

Apakah MySQL bisa menyimpan gambar?

MySQL memiliki tipe data BLOB (binary larger object) yang dapat menampung data biner dalam jumlah besar. Tipe data BLOB sangat cocok untuk menyimpan data gambar.