Delphi Can
Rest Serverdan androide image download etmek - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Rest Serverdan androide image download etmek (/showthread.php?tid=7347)



Rest Serverdan androide image download etmek - serifaliyagci - 02-07-2023

Merhaba arkadaşlar projemde bir şekilde android uygulama içinden rest sunucunun çalıştığı bilgisayarın belirli bir klasöründeki jpg uzantılı dosyaları androidde belirteceğim dizine sırasıyla download etmek istiyorum. Bu konu hakkında yardımcı olabilir misiniz? Uygulama içinde belirli bir mantığa göre bu jpg dosyaları kullanıcıya göstererek işlem yaptırmam gerekiyor. Şuan telefonu bilgisayara bağlayıp belirttiğim dizine kopyalayarak işlemi gerçekleştiriyorum fakat her kullanıcıya da telefonu ver fotoğrafları yükleyelim demek de mantıklı gelmiyor.


Cvp: Rest Serverdan androide image download etmek - hi_selamlar - 04-07-2023

(02-07-2023, Saat: 23:26)serifaliyagci Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar projemde bir şekilde android uygulama içinden rest sunucunun çalıştığı bilgisayarın belirli bir klasöründeki jpg uzantılı dosyaları androidde belirteceğim dizine sırasıyla download etmek istiyorum. Bu konu hakkında yardımcı olabilir misiniz? Uygulama içinde belirli bir mantığa göre bu jpg dosyaları kullanıcıya göstererek işlem yaptırmam gerekiyor. Şuan telefonu bilgisayara bağlayıp belirttiğim dizine kopyalayarak işlemi gerçekleştiriyorum fakat her kullanıcıya da telefonu ver fotoğrafları yükleyelim demek de mantıklı gelmiyor.

Merhabalar,

Yapılmak isteneni tam olarak anlayamadım kendi adıma belirtmek gerekirse.

Rest sunucudan zaten resimleri alabildiğinizi belirtmişsiniz. Rest ile base64 encode/decode ederek resimleri alabilirsiniz.

Bu link'i de inceleyebilirsiniz..

Uygulamayı kullanıcılara dağıtıp (ip adresinize dikkat etmeniz gerekli) resimleri alabilirsiniz.

Kolay gelsin.


Cvp: Rest Serverdan androide image download etmek - serifaliyagci - 04-07-2023

(04-07-2023, Saat: 12:58)hi_selamlar Adlı Kullanıcıdan Alıntı:
(02-07-2023, Saat: 23:26)serifaliyagci Adlı Kullanıcıdan Alıntı: Merhaba arkadaşlar projemde bir şekilde android uygulama içinden rest sunucunun çalıştığı bilgisayarın belirli bir klasöründeki jpg uzantılı dosyaları androidde belirteceğim dizine sırasıyla download etmek istiyorum. Bu konu hakkında yardımcı olabilir misiniz? Uygulama içinde belirli bir mantığa göre bu jpg dosyaları kullanıcıya göstererek işlem yaptırmam gerekiyor. Şuan telefonu bilgisayara bağlayıp belirttiğim dizine kopyalayarak işlemi gerçekleştiriyorum fakat her kullanıcıya da telefonu ver fotoğrafları yükleyelim demek de mantıklı gelmiyor.

Merhabalar,

Yapılmak isteneni tam olarak anlayamadım kendi adıma belirtmek gerekirse.

Rest sunucudan zaten resimleri alabildiğinizi belirtmişsiniz. Rest ile base64 encode/decode ederek resimleri alabilirsiniz.

Bu link'i de inceleyebilirsiniz..

Uygulamayı kullanıcılara dağıtıp (ip adresinize dikkat etmeniz gerekli) resimleri alabilirsiniz.

Kolay gelsin.

Merhabalar cevap için çok teşekkür ederim. Rest server ın çalıştığı bilgisayarda bir klasörde tüm fotoğrafları tutuyoruz. Bu fotoğrafları bir şekilde mobile taşımam gerekiyor ve bunu bir sefer yapıp depolayarak kullanım kolaylığı sağlamak istiyorum açıkçası. Ama rest server ın kurulu olduğu sunucudaki fotoğrafları nasıl sırasıyla download edebilirim konusu yok bende malesef. Çok araştırma yaptım ama bir türlü hedeflediğim şey hakkında bir bilgi bulamadım. Verdiğiniz linkteki soru cevapları da okudum ama konunun benimle istediğimle alakalı olup olmadığı konusunda hiçbir fikrim yok çünkü bilmediğim bir konu.

Özetle bir rest sunucu var ve bu sunucu üzerinde bir klasörde fotoğraflar var bunları mobilde bir dizine sırasıyla indirmek istiyorum.


Cvp: Rest Serverdan androide image download etmek - RAD Coder - 04-07-2023

Sunucu üzerindeki dosyaların toplam boyutu son derece önem taşımaktadır. Tüm dosyaları sıkıştırıp, tek seferde kopyalayabilirsiniz. 
Sıkıştırılmış dosya boyutu büyükse, belli bir sayıda dosyayı sıkıştırarak, birkaç sıkıştırma ile tümünü aktarabilirsiniz. 
Bu yöntemler mümkün değilse tek tek de transfer edebilirsiniz. 
Transfer işlemi; ister tek tek olsun ister sıkıştırılmış dosya olsun, mutlaka base64 formatına dönüştürün öyle gönderin. 
Mobil tarafta base64 encode ederek dosyayı tekrar elde edebilirsiniz. 
Base64 encode ve decode için System.NetEncoding.TBase64Encoding sınıfını kullanabilirsiniz. 
Sunucu üzerindeki dosyaların listesini TDirectory.GetFiles fonksiyonu ile alabilirsiniz.


Cvp: Rest Serverdan androide image download etmek - serifaliyagci - 04-07-2023

(04-07-2023, Saat: 15:27)RAD Coder Adlı Kullanıcıdan Alıntı: Sunucu üzerindeki dosyaların toplam boyutu son derece önem taşımaktadır. Tüm dosyaları sıkıştırıp, tek seferde kopyalayabilirsiniz. 
Sıkıştırılmış dosya boyutu büyükse, belli bir sayıda dosyayı sıkıştırarak, birkaç sıkıştırma ile tümünü aktarabilirsiniz. 
Bu yöntemler mümkün değilse tek tek de transfer edebilirsiniz. 
Transfer işlemi; ister tek tek olsun ister sıkıştırılmış dosya olsun, mutlaka base64 formatına dönüştürün öyle gönderin. 
Mobil tarafta base64 encode ederek dosyayı tekrar elde edebilirsiniz. 
Base64 encode ve decode için System.NetEncoding.TBase64Encoding sınıfını kullanabilirsiniz. 
Sunucu üzerindeki dosyaların listesini TDirectory.GetFiles fonksiyonu ile alabilirsiniz.

Çok teşekkür ederim. Ben tek tek indirip saklamayı deniycem.


Cvp: Rest Serverdan androide image download etmek - serifaliyagci - 15-07-2023

(04-07-2023, Saat: 15:42)serifaliyagci Adlı Kullanıcıdan Alıntı:
(04-07-2023, Saat: 15:27)RAD Coder Adlı Kullanıcıdan Alıntı: Sunucu üzerindeki dosyaların toplam boyutu son derece önem taşımaktadır. Tüm dosyaları sıkıştırıp, tek seferde kopyalayabilirsiniz. 
Sıkıştırılmış dosya boyutu büyükse, belli bir sayıda dosyayı sıkıştırarak, birkaç sıkıştırma ile tümünü aktarabilirsiniz. 
Bu yöntemler mümkün değilse tek tek de transfer edebilirsiniz. 
Transfer işlemi; ister tek tek olsun ister sıkıştırılmış dosya olsun, mutlaka base64 formatına dönüştürün öyle gönderin. 
Mobil tarafta base64 encode ederek dosyayı tekrar elde edebilirsiniz. 
Base64 encode ve decode için System.NetEncoding.TBase64Encoding sınıfını kullanabilirsiniz. 
Sunucu üzerindeki dosyaların listesini TDirectory.GetFiles fonksiyonu ile alabilirsiniz.

Çok teşekkür ederim. Ben tek tek indirip saklamayı deniycem.

Merhabalar bu konu ile alakalı bir durum ortaya çıktı. Şöyle ki; sunucudan gelen fotoğraf jpg ben bunu base64 encode edip mobile json olarak gönderdim fakat orada şöyle bir sorun ortaya çıktı. Gelen veri jpg uzantılı bir dosyaya ait ve doğru bir veri "https://base64.guru/converter/decode/image" bu sitede kontrol ettim ama mobilde bu base64 veriyi decode edemiyorum bana gelen verinin bitmap olmadığını söyleyip hata veriyor.

Sunucu tarafında uriye bağlı action şöyle

procedure TWebModule1.WebModule1DosyaIndirAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
 StrJSon: TJsonObjectWriter;
 ImageIstek: TJSONObject;
 Stok: String;
begin
 if (Request.MethodType <> TMethodType.mtPost) then
   Handled := False
 else
 begin
   ImageIstek := TJSONObject.ParseJSONValue
     (TEncoding.UTF8.GetBytes(Request.Content), 0) as TJSONObject;
   {
     "stok" : "152011001"
   }
   Stok := ImageIstek.P['stok'].Value;

   try
     StrJSon := TJsonObjectWriter.Create;
     StrJSon.WriteStartObject;
     StrJSon.WritePropertyName('image');
     StrJSon.WriteValue(EncodeFileToBase64('C:\inetpub\wwwroot\ImageWeb\Image\'
       + Stok + '.jpg'));
     Response.ContentType := 'application/json';
     Response.Content := StrJSon.JSON.ToString;
   finally
     StrJSon.WriteEndObject;
     StrJSon.DisposeOf;
     ImageIstek.DisposeOf;
   end;
 end;


// Client tarafında ise

function Base64ToBitmap(const Base64Str: string): TBitmap;
var
 Stream: TMemoryStream;
 DecodedData: TBytes;
begin
 Result := TBitmap.Create;
 Stream := TMemoryStream.Create;
 try
   DecodedData := TNetEncoding.Base64.DecodeStringToBytes(Base64Str);

   Stream.WriteData(DecodedData, Length(DecodedData));
   Stream.Position := 0;

   Result.LoadFromStream(Stream);
 finally
   Stream.Free;
 end;
end;

procedure SaveBase64AsJPEG(const Base64Str: string; const FileName: string);
var
 Bitmap: TBitmap;
begin
 Bitmap := Base64ToBitmap(Base64Str);
 try
   Bitmap.SaveToFile(FileName);
 finally
   Bitmap.Free;
 end;
end;


Fonksiyon ve prosedür ile 

    
StokBase64 := DataModulum.dmRESTResponse.Content;

 SaveBase64AsJPEG(StokBase64, TPath.GetSharedDocumentsPath + PathDelim +'152011001.jpg');


gelen veriyi dosyaya kaydetmeye çalışıyorum ama gelen base64 bitmap dosyaya ait olmadığı için hata veriyor. Bu konuda bana nasıl yardımcı olabilirsiniz?


Cvp: Rest Serverdan androide image download etmek - serifaliyagci - 17-07-2023

(15-07-2023, Saat: 16:16)serifaliyagci Adlı Kullanıcıdan Alıntı:
(04-07-2023, Saat: 15:42)serifaliyagci Adlı Kullanıcıdan Alıntı: Çok teşekkür ederim. Ben tek tek indirip saklamayı deniycem.

Merhabalar bu konu ile alakalı bir durum ortaya çıktı. Şöyle ki; sunucudan gelen fotoğraf jpg ben bunu base64 encode edip mobile json olarak gönderdim fakat orada şöyle bir sorun ortaya çıktı. Gelen veri jpg uzantılı bir dosyaya ait ve doğru bir veri "https://base64.guru/converter/decode/image" bu sitede kontrol ettim ama mobilde bu base64 veriyi decode edemiyorum bana gelen verinin bitmap olmadığını söyleyip hata veriyor.

Sunucu tarafında uriye bağlı action şöyle

procedure TWebModule1.WebModule1DosyaIndirAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
 StrJSon: TJsonObjectWriter;
 ImageIstek: TJSONObject;
 Stok: String;
begin
 if (Request.MethodType <> TMethodType.mtPost) then
   Handled := False
 else
 begin
   ImageIstek := TJSONObject.ParseJSONValue
     (TEncoding.UTF8.GetBytes(Request.Content), 0) as TJSONObject;
   {
     "stok" : "152011001"
   }
   Stok := ImageIstek.P['stok'].Value;

   try
     StrJSon := TJsonObjectWriter.Create;
     StrJSon.WriteStartObject;
     StrJSon.WritePropertyName('image');
     StrJSon.WriteValue(EncodeFileToBase64('C:\inetpub\wwwroot\ImageWeb\Image\'
       + Stok + '.jpg'));
     Response.ContentType := 'application/json';
     Response.Content := StrJSon.JSON.ToString;
   finally
     StrJSon.WriteEndObject;
     StrJSon.DisposeOf;
     ImageIstek.DisposeOf;
   end;
 end;


// Client tarafında ise

function Base64ToBitmap(const Base64Str: string): TBitmap;
var
 Stream: TMemoryStream;
 DecodedData: TBytes;
begin
 Result := TBitmap.Create;
 Stream := TMemoryStream.Create;
 try
   DecodedData := TNetEncoding.Base64.DecodeStringToBytes(Base64Str);

   Stream.WriteData(DecodedData, Length(DecodedData));
   Stream.Position := 0;

   Result.LoadFromStream(Stream);
 finally
   Stream.Free;
 end;
end;

procedure SaveBase64AsJPEG(const Base64Str: string; const FileName: string);
var
 Bitmap: TBitmap;
begin
 Bitmap := Base64ToBitmap(Base64Str);
 try
   Bitmap.SaveToFile(FileName);
 finally
   Bitmap.Free;
 end;
end;


Fonksiyon ve prosedür ile 

    
StokBase64 := DataModulum.dmRESTResponse.Content;

 SaveBase64AsJPEG(StokBase64, TPath.GetSharedDocumentsPath + PathDelim +'152011001.jpg');


gelen veriyi dosyaya kaydetmeye çalışıyorum ama gelen base64 bitmap dosyaya ait olmadığı için hata veriyor. Bu konuda bana nasıl yardımcı olabilirsiniz?


Merhabalar, ben problemi çözdüm. Gelen json da \r şeklinde karakterler gördüm. Sunucudan aldığım json da bu karakterler yoktu bende replacetext yaparak o karakterleri yok ettim sorunum çözüldü.