Resim dosyasını Base64 ile göndermek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ThE-yLmZ
Üye
Mesajlar: 28
Kayıt: 14 Eki 2005 04:59
İletişim:

Resim dosyasını Base64 ile göndermek

Mesaj gönderen ThE-yLmZ »

Merhaba Arkadaşlar;

Bilgisayardan resim dosyasını php ye post verisi olarak göndermek istiyorum. Bu konu hakkında uzunca bir araştırma yaptım ve Base64 kodlama ile göndrebileceğimi çözdüm.

Kısaca, bir php ye post verisi olarak resmin Base64 kodunu Delphi ile göndericem. Php ile de o kodu herhangi bir yere yazdırıcam. Php tarafını hallettim. Ancak Delphi de resmi komple base64 yapamadım. Siteyi ve genel olarak google da çok arama yaptım ancak String verisini sürekli olarak base64 yapmışlar.

Yardım edebilir misiniz? Teşekkür ederim.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Resim dosyasını Base64 ile göndermek

Mesaj gönderen emin_as »

Base64 ile ugraşmana gerek yok TIdMultiPartFormDataStream bileşeniyle her türlü verini php ye gönderebilirsin.

Basit bir örnek:
Önce bileşenleri oluşturuyoruz.

Kod: Tümünü seç

   sendweb:=TidHttp.Create(Self);
    post1 := TIdMultiPartFormDataStream.Create;
Normal string bilgileri ekleme

Kod: Tümünü seç

    post1.AddFormField('user', kullanici);
    post1.AddFormField('pass',sifre);
Jpg resim bilgileri ekleme

Kod: Tümünü seç

    ms:=TMemoryStream.Create;
    jpg :=TJpegImage.Create;
    jpg.Assign(ibdataset1.Fieldbyname('RESIM'));
    jpg.SaveToStream(ms);
    post1.AddObject('picture','image/jpeg',ms,'resimadi.jpg');
    jpg.Free;
Post değişkenlerine tüm bilgiler eklenince, artık siteye gönderebiliriz.

Kod: Tümünü seç

    sendweb.Request.ContentType := post1.RequestContentType;
    post1.Position := 0;
    result:=sendweb.Post('www.sitem.com/yukle.php',post1);
İşimiz bittikten sonra bileşenleri free edebiliriz.

Kod: Tümünü seç

    post1.Free; 
    sendweb.Free;   
Kod a try finally bölümlerini eklemeyi de unutma.
Bu şekilde çalışır, ama bir problem olursa nesneler dogru şekilde free edilmeyebilir.
Kullanıcı avatarı
ThE-yLmZ
Üye
Mesajlar: 28
Kayıt: 14 Eki 2005 04:59
İletişim:

Re: Resim dosyasını Base64 ile göndermek

Mesaj gönderen ThE-yLmZ »

Deniyorum, Çok saol kardeşim..
Kullanıcı avatarı
ThE-yLmZ
Üye
Mesajlar: 28
Kayıt: 14 Eki 2005 04:59
İletişim:

Re: Resim dosyasını Base64 ile göndermek

Mesaj gönderen ThE-yLmZ »

site üzerinden php ile veri gönderdiğimde düzgün kaydediyor ancak bu kodlarla nedense gönderim işleminden sonra 2 byte sadece dosya ismi yaratıyor. Neden olur ki?

Kodlar şunlar;

Kod: Tümünü seç

var
resultx:string;
begin
sendweb:=TidHttp.Create(Self);
post1 := TIdMultiPartFormDataStream.Create;
ms:=TMemoryStream.Create;
jpg :=TJpegImage.Create;
jpg.Assign(Image1.Picture.Bitmap);
jpg.SaveToStream(ms);
post1.AddObject('image','image/jpeg',ms,ExtractFileName(edit1.text));
jpg.Free;
sendweb.Request.ContentType := post1.RequestContentType;
post1.Position := 0;
resultx:=sendweb.Post('http://www.xx.net/resim.php',post1);
memo1.Text:=resultx;
post1.Free; 
sendweb.Free;

try koyarak da denedim olmadı.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Resim dosyasını Base64 ile göndermek

Mesaj gönderen emin_as »

Php de gönderilen dosyayı nasil kaydediyorsun, aşagıdakine benzer bir kod kullanman gerekir.

move_uploaded_file($_FILES["image"]["tmp_name"],"resim_dir/" . $_FILES["image"]["name"]);

Ayrıca herhangi bir hata oluşmuş mu kontrol da etmelisin

if ($_FILES["image"]["error"] > 0)
{
echo "Gönderim hatası: " . $_FILES["file"]["error"] ;
}
Cevapla