Images

Post gambar ke field blob database mengunakan Delphi & Php



akhirnya selama dua minggu surfing di google akhirnya ada titik terang tentang sedikit permasalahan coding yang saya alami, dimana beberapa kasus untuk menyimpan gambar di database hosting via jalur internet lumayan sulit, beberapa teknik sudah saya terapkan, menggunakan convert stream ke binary, convert ke base64 dll sudah saya terapkan dan itu sangat sulit.

dan taadaa akhirnya saya menemukan teknik ini, cekkk itt dottt broww..

disini kita akan membuat aplikasi dekstop menggunakan delphi, yang akan menyimpan gambar di field blob database di hosting. untuk itu kita memerlukan sebuah service untuk menerima data, jadi kita gunakan php, selengkapnya ikuti tahapan berikut.

1. siapkan table databasenya dulu.
CREATE TABLE IF NOT EXISTS `file_attachment` (
`id` bigint(20) NOT NULL,
  `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'
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

2. buat service php untuk menerima post dari aplikasi dekstop. simpan dgn nama insert_blob.php
<?php
// CONECT DATABASE
@mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE");
@mysql_select_db("gambar") OR die ("CONNECTED, BUT NO DATABASE");

    $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";
?>
3. ini coding php untuk menampil dan mengambil gambar dari database, simpan dgn nama view_blob.php cara menggunakan nya jadi jika ingin melihat gambar di id 1 maka http://localhost/project/view_blob.php?id=1
<?php
// CONECT DATABASE
@mysql_connect("localhost", "root", "") OR die ("NOT CONNECT DATABASE");
@mysql_select_db("gambar") OR die ("CONNECTED, BUT NO DATABASE");

function jin_gfile($txt) {
$txt = preg_replace("/[^a-zA-Z0-9s.]/", "_", trim($txt));
return $txt;
}
$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!";
}
?>
4. coding php untuk menampilkan gambar. ini khusus untuk aplikasi di php
<?php  
echo '<img src="http://localhost/gambar/view_blob.php?id='. $_GET['gambar'] .'" alt="Gambar Alumni 1996">';
?>
5. selanjutnya coding untuk di delphi, untuk menyimpan gambar jgn lupa tambahkan uses IdMultipartFormData
procedure TForm1.Button1Click(Sender: TObject);
var
  PostData: TIdMultipartFormDataStream;
  id : TidHttp;
begin
  PostData := TIdMultipartFormDataStream.Create;
  id := TIdHttp.Create();
    try
      PostData.AddFile('file', 'D:\pictures\images.jpg');
      id.Post('http://localhost/gambar/insert_blob.php', PostData);
      showmessage('Berhasil terupload');
    finally
      PostData.Free;
      id.Free;
    end;
end;
6. untuk mengambil gambar di delphi
procedure TForm1.Button2Click(Sender: TObject);
var
id : TidHttp;
gambar : TMemoryStream;
begin
       id := TIdHttp.Create();
       gambar := TMemoryStream.Create;
       try
          Id.Get('http://localhost/gambar/view_blob.php?id=2',gambar);
          gambar.Position := 0;
          Image1.Bitmap.LoadFromStream(gambar);
       finally
          id.Free;
          gambar.Free;
       end;
end;
7. bonus jadi jika ingin post gambar berserta field yang lain misalnya nama, keterangan dll, jangan lupa untuk menyesuaikan struktur databasenya.
procedure TForm1.Button1Click(Sender: TObject);
var
  PostData: TIdMultipartFormDataStream;
  id : TidHttp;
begin
  PostData := TIdMultipartFormDataStream.Create;
  id := TIdHttp.Create();
    try
      PostData.AddFile('file', 'D:\pictures\images.jpg');
               PostData.AddFormField('nama', nama.text);
               PostData.AddFormField('keterangan', keterangan.text);
      id.Post('http://localhost/gambar/insert_blob.php', PostData);
      showmessage('Berhasil terupload');
    finally
      PostData.Free;
      id.Free;
    end;
end;

Sekian penjelasan singkat tutorial Post gambar ke field blob database di hosting internet menggunakan Delphi dan PHP.

1 komentar:

  1. salam coding bang!!!
    izin bertanya,,, bagaimana jika gambar dari database web server bukan BLOB field
    tapi hanya berupa catatan file path...
    naha bagaimana cara membaca dokumen gambar tersebut bisa terbaca oleh delphi sesuai file path yang ada pada isi tabel....

    BalasHapus