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.
Resimlerin alınacağı bir web servis yazımı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Resimlerin alınacağı bir web servis yazımı
Muttalip TOPTAŞ
Yıldız Teknik Üniversitesi
Bilgi İşlem Dairesi Başkanlığı
Tel: 0212-3832134
Yıldız Teknik Üniversitesi
Bilgi İşlem Dairesi Başkanlığı
Tel: 0212-3832134
Re: Resimlerin alınacağı bir web servis yazımı
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 ;
ByteArray ı dosyaya çeviren fonksiyon ;
İyi çalışmalar.
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;
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: Resimlerin alınacağı bir web servis yazımı
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.
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
Yıldız Teknik Üniversitesi
Bilgi İşlem Dairesi Başkanlığı
Tel: 0212-3832134
Re: Resimlerin alınacağı bir web servis yazımı
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.
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
www.polisoft.com.tr
Re: Resimlerin alınacağı bir web servis yazımı
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.
Re: Resimlerin alınacağı bir web servis yazımı
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.
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
www.polisoft.com.tr