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.