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
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");$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";?>
<?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
5. selanjutnya coding untuk di delphi, untuk menyimpan gambar jgn lupa tambahkan uses IdMultipartFormData<?phpecho '<img src="http://localhost/gambar/view_blob.php?id='. $_GET['gambar'] .'" alt="Gambar Alumni 1996">';?>
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);varPostData: TIdMultipartFormDataStream;id : TidHttp;beginPostData := TIdMultipartFormDataStream.Create;id := TIdHttp.Create();tryPostData.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');finallyPostData.Free;id.Free;end;end;
Sekian penjelasan singkat tutorial Post gambar ke field blob database di hosting internet menggunakan Delphi dan PHP.
salam coding bang!!!
BalasHapusizin 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....