Resimlerin alınacağı bir web servis yazımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
muttalip
Üye
Mesajlar: 71
Kayıt: 18 Haz 2003 08:58
Konum: İstanbul
İletişim:

Resimlerin alınacağı bir web servis yazımı

Mesaj gönderen muttalip »

Delphi'de bir web servis yazmaya çalışıyorum. Kullandığım tablo alanları idno integer, resim blob olarak tanımlı.
Tablonun blob alanını web servisde nasıl tanımlamam gerekiyor. Resimler bu blob alanda kayıtlı durumda. Bir client yazılımı ile web servisten bu blob alanındaki resimleri alıp görüntülemek istiyorum.

Cevaplarınız için şimdiden teşekkür ederim.
Muttalip TOPTAŞ

Yıldız Teknik Üniversitesi
Bilgi İşlem Dairesi Başkanlığı

Tel: 0212-3832134
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Resimlerin alınacağı bir web servis yazımı

Mesaj gönderen vkamadan »

Merhaba ,
Bildiğim ve kullandığım kadarıyla bir XML Web servisiyle BLOB bir datayı taşımanın en pratik yolu ByteArray ile taşımaktır
database den resmi okuyup geçici bir dosyaya kayıt yapın sonra aşadağıdaki fonksiyon ile ByteArray çıktı elde edin, client uygulama da sizdeyse diğer fonksiyon ile tekrar dosyaya dönüştürebilirsiniz, sizde değilse de TRemotable dan türemiş sınıfa bu bilgiyi tutmak için ekleyeceğiz TByteDynArray tipi herhangi karşı uygulamada "base64Binary" olarak genel kabul görmüş bir tipte algılanacaktır..

Dosyayı ByteArray e çeviren fonksiyon ;

Kod: Tümünü seç

function FileToByteArray(const FileName: string): TByteDynArray;
const
  BLOCK_SIZE = 1024;
var
  BytesRead, BytesToWrite, Count : integer;
  F : FIle of Byte;
  pTemp : Pointer;
begin
  AssignFile( F, FileName );
  Reset(F);
  try
    Count := FileSize( F );
    SetLength(Result, Count );
    pTemp := @Result[0];
    BytesRead := BLOCK_SIZE;
    while (BytesRead = BLOCK_SIZE ) do
    begin
      BytesToWrite := Min(Count, BLOCK_SIZE);
      BlockRead(F, pTemp^, BytesToWrite , BytesRead );
      pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
      Count := Count-BytesRead;
    end;
  finally
    CloseFile( F );
  end;
end;


ByteArray ı dosyaya çeviren fonksiyon ;

Kod: Tümünü seç

procedure ByteArrayToFile(const ByteArray: TByteDynArray;
  const FileName: string);
var
  Count : integer;
  F : FIle of Byte;
  pTemp : Pointer;
begin
  AssignFile( F, FileName );
  Rewrite(F);
  try
    Count := Length( ByteArray );
    pTemp := @ByteArray[0];
    BlockWrite(F, pTemp^, Count );
  finally
    CloseFile( F );
  end;
end;

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
muttalip
Üye
Mesajlar: 71
Kayıt: 18 Haz 2003 08:58
Konum: İstanbul
İletişim:

Re: Resimlerin alınacağı bir web servis yazımı

Mesaj gönderen muttalip »

TFotograf = class(TRemotable)
private
Fidno: Integer;
Fresim: array of byte;
published
property idno: Integer read Fidno write Fidno;
property resim: array of byte read Fresim write Fresim;
end;

{ Invokable interfaces must derive from IInvokable }
IDemoSoapWebServisi = interface(IInvokable)
['{16A89838-AB96-4C2F-B335-CB197E8A0711}']

{ Methods of Invokable interface must not use the default }
{ calling convention; stdcall is recommended }
function Fotograf(const idno: Integer): TFotograf; stdcall;
end;


Web servisi tarafında bu şekilde bir tanımlama yapıyorum.
property resim: array of byte read Fresim write Fresim; satırında hata veriyor.

Burada resim alanı tabloda blob bir alandı. Bu tanımlamayı burada nasıl yapmam gerekiyor.
Muttalip TOPTAŞ

Yıldız Teknik Üniversitesi
Bilgi İşlem Dairesi Başkanlığı

Tel: 0212-3832134
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Resimlerin alınacağı bir web servis yazımı

Mesaj gönderen vkamadan »

Merhaba
Eğer bahsettiğim yöntemle ilerlemek istiyorsanız FResim alanının tipi TByteDynArray olmalı,
BLOB veriyi geçici bir dosyaya aldıktan sonra ,
yukarıda ki mesajım da belirttiğim fonksiyonları kullanarak Resimi TByteDynArray tipine çevirip gönderebilirsiniz.
Volkan KAMADAN
www.polisoft.com.tr
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: Resimlerin alınacağı bir web servis yazımı

Mesaj gönderen varyemez »

Fonksiyonu denedim mükemmel çalışıyor , teşekkürler. Birşey sorayım. TbytedynArray ın file şekline çevrilmesi gibi stream tipine (ya da tersi) dönüştüren fonksiyon var mı. Çünkü gelen veri ziplenmiş xml dosya , bunu abzipper ile açmak zorundayım. stream olarak alırsam hiç dosya işleriyle uğraşmadan zipi açıp xmlDoc içine çekip kullanmak kolayıma gidecek.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Resimlerin alınacağı bir web servis yazımı

Mesaj gönderen vkamadan »

MErhaba Kendi deneyimim olmadı fakat ilk linkte Stream in TByteDynArray a dönüşümü, diğer linkte de tam tersi durumlarda hakkında çalışmalar var bir göz atın isterseniz.

http://www.experts-exchange.com/Program ... 43717.html

http://www.experts-exchange.com/Program ... 03902.html

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla