
idFTP ile yükleme sorunsalı!...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
idFTP ile yükleme sorunsalı!...
İyi günler. Başıma gelen çok ilginç bir durumu aktarmak istiyorum. Deneme amaçlı yaptığım bir uygulamam var. Bu uygulamada basit başka bir projeyi, belirli aralıklarla derleyip, sıkıştırıp internette iki farklı sunucuya yükleyen bir sistem geliştirmekteyim. İşin can alıcı noktası ise, bu derlenmiş dosyayı .zip olarak sıkıştırıp internete Indy Client bileşeni olan idFTP'nin Put metodu ile attığım zaman (parametrelerde hem dosya adı ile (FileName:String) hem de TMemoryStream ile (Stream:TStream) ayrı ayrı denememe rağmen ikisi de aynı şekilde çalışarak) bir sunucuya doğru olarak yüklerken, diğer sunucuya bir byte eksik yüklemektedir. İncelediğimde ise son bir kaç "byte"ın "0" olduğunu ve bu "byte"lardan sadece sonuncusunun eksik olduğunu fark ettim. Aynı idFTP.Put metodu diğer sunucuya doğru yükleme yapmaktadır. Bir diğer çarpıcı nokta ise bu dosyayı Delphi2005 ile derlemiş, onu sıkıştırıp göndermeye çalışmıştım. Bunu bir de Delphi7 ile derleyip, sıkıştırıp gönderdiğimde ise her iki sunucuya yüklenen dosya doğru olarak yüklenebilmektedir. Ben de buraya kadar dedim denemeleri bıraktım, delphi7 kullanacağımdır ama her şey kağıt üstünde normal iken böyle bir sorunun sebebi sizce nedendir bilen var mıdır acep? Zaten sonraki testlerime çalışan delphi7'ye göre devam edeceğimdir ama belirttiğim bu sıkıntımın sebebi ftp sunucudan mı kaynaklanmaktadır bilemedim. Bu soruyu da olaya kendimce net bir nokta koyamadım ondan sordum
. İyi çalışmalar.

Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: idFTP ile yükleme sorunsalı!...
İlk aklıma gelen FTP Client'ın TransferType özelliği. Her iki durumda da ftBinary olduğundan emin olunuz.
Lokal'de kendi yazacağınız FTP sunucu ile (Indy demo'larında vardı sanıyorum) test edip, problemin FTP sunucudan kaynaklanıp kaynaklanmadığını anlayabilirsiniz.
Lokal'de kendi yazacağınız FTP sunucu ile (Indy demo'larında vardı sanıyorum) test edip, problemin FTP sunucudan kaynaklanıp kaynaklanmadığını anlayabilirsiniz.
There's no place like 127.0.0.1
Re: idFTP ile yükleme sorunsalı!...
Delphi 2005 de unicode varmıydı? ondan kaynaklı bir problem olabilir. indy versiyonlarıda sanırım aynıdır.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: idFTP ile yükleme sorunsalı!...
Sanırım kopyala yapıştır ile program yazmanın böyle yan etkileri oluyor. FTP'ye dosya yükleyen bir şablon hazırlamıştım bir zamanlar, çalıştığı için onu aynen kullandım. Bu özelliğin ftASCII olması hiç gözüme çarpmamış. Bunun da protokolü etkileyen çok önemli bir unsur olduğuna şahit olmuş bulunmaktayım. Kodu geliştirirken hep çalışıyor olması nedeniyle o kadar önemsememiştim hal bu kiSimaWB yazdı:İlk aklıma gelen FTP Client'ın TransferType özelliği. Her iki durumda da ftBinary olduğundan emin olunuz....



Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
-
- Üye
- Mesajlar: 28
- Kayıt: 15 Eyl 2014 12:33
Re: idFTP ile yükleme sorunsalı!...
S.a aynı sıkıntı bende de var
Foruma yazacaktım once araştır sonra yaz
Buldum inşallah pazartesi deneyeceğim
birde
Aynı bağlantı bilgileri ile FileZilla ile bağlantı yaptığım halde
idftp bazı ftp lere bağlanmıyor
nedeni ne olabilir TransferType mıdır
Foruma yazacaktım once araştır sonra yaz
Buldum inşallah pazartesi deneyeceğim
birde
Aynı bağlantı bilgileri ile FileZilla ile bağlantı yaptığım halde
idftp bazı ftp lere bağlanmıyor
nedeni ne olabilir TransferType mıdır
Re: idFTP ile yükleme sorunsalı!...
Merhaba,
Bağlanmadığı zaman hata mesajı alıyor musunuz? Evet ise hata nedir?
Detay bilgi vermeden çok yardımcı olmak mümkün olmuyor.
Bağlanmadığı zaman hata mesajı alıyor musunuz? Evet ise hata nedir?
Detay bilgi vermeden çok yardımcı olmak mümkün olmuyor.
-
- Üye
- Mesajlar: 28
- Kayıt: 15 Eyl 2014 12:33
Re: idFTP ile yükleme sorunsalı!...
Hat mesajı veriyor ancak pc iş yerinde oldugunda su anda hata mesajı aklıma gelmiyor inşallah pazartesi deneyip buraya yazacağım
Re: idFTP ile yükleme sorunsalı!...
Merhaba,
Nedense aynı dönmelerde aynı geliştirmeler ve aynı sorunlar yaşanıyor
Geçen hafta da benim aynı geliştirmeye ihtiyacım oldu ve aynı sıkıntıyı yaşamıştım.Biraz araştırma ile sorunu aşağıdaki şekilde çözdüm ve sorunsuz kullanıyorum.
Veli hocamız gerekli ipucunu vermiş aslında.
Çözüm için,
Nedense aynı dönmelerde aynı geliştirmeler ve aynı sorunlar yaşanıyor

Geçen hafta da benim aynı geliştirmeye ihtiyacım oldu ve aynı sıkıntıyı yaşamıştım.Biraz araştırma ile sorunu aşağıdaki şekilde çözdüm ve sorunsuz kullanıyorum.
Veli hocamız gerekli ipucunu vermiş aslında.
Çözüm için,
Kod: Tümünü seç
Uses
IdFTPCommon
....
Try
ftp.Host := FTPUzakSunucu.Text;
ftp.Username := FTPKullanici.Text;
ftp.password := FTPParola.Text;
FTP.Passive :=True;
ftp.Port :=21;
FTP.TransferType := ftBinary;// Bu alanı Eklemeniz gerekmektedir.
ftp.Connect;
ftp.ChangeDir(FtpUzakKlasor.Text);
ftp.Put(EdtDosyaYolu.Text);
ftp.Quit;
ftp.Disconnect;
except on E: Exception do
Begin
// Mesaj(3,E,'Dosya Transferi Başarısız oldu!','');
ftp.Quit;
ftp.Disconnect;
End;
End;
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
-
- Üye
- Mesajlar: 28
- Kayıt: 15 Eyl 2014 12:33
Re: idFTP ile yükleme sorunsalı!...
Hocam yardımlarınız icin tşkler
Bazi ftplere baglanip bazi ftplere bağlanmaması neden yapar
FTP->Passive =true;
Gibi bişey yazmadım
Passive nin default değeri nedir bilemiyorum
Ancak ftp ip adresini kullanıcı adi ve parola bilgilerini doğru girdiğim (kontol icin notepad acip oraya yapistiriyorum)
halde
the parameter is incorrect
Hatası döndürüyor
Aynı bilgiler ile FileZilla dan bağlantı kuruyorum
Bazi ftplere baglanip bazi ftplere bağlanmaması neden yapar
FTP->Passive =true;
Gibi bişey yazmadım
Passive nin default değeri nedir bilemiyorum
Ancak ftp ip adresini kullanıcı adi ve parola bilgilerini doğru girdiğim (kontol icin notepad acip oraya yapistiriyorum)
halde
the parameter is incorrect
Hatası döndürüyor
Aynı bilgiler ile FileZilla dan bağlantı kuruyorum
Re: idFTP ile yükleme sorunsalı!...
Merhaba,
Hayırlı Haftalar.
Aldığınız uyarı parametrelerin hatalı olduğuna dair. Bazı FTP ler için bu sorunu yaşadığınızı belirtiyorsunuz.
Tek aklıma gelen olasılık ise bağlantı yapmak istediğiniz host için TLS/SSL protokolü olabileceği.
İyi Çalışmalar.
Hayırlı Haftalar.
Aldığınız uyarı parametrelerin hatalı olduğuna dair. Bazı FTP ler için bu sorunu yaşadığınızı belirtiyorsunuz.
Tek aklıma gelen olasılık ise bağlantı yapmak istediğiniz host için TLS/SSL protokolü olabileceği.
İyi Çalışmalar.
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
-
- Üye
- Mesajlar: 28
- Kayıt: 15 Eyl 2014 12:33
Re: idFTP ile yükleme sorunsalı!...
Hocam bilemiyorum
FileZilla bağladım ana dikkat etmedim yarın yine denicem
Eger oyle ise idftp ile nasil bağlantı kuracagim
FileZilla bağladım ana dikkat etmedim yarın yine denicem
Eger oyle ise idftp ile nasil bağlantı kuracagim
Re: idFTP ile yükleme sorunsalı!...
Eğer sakıncası yok ise kod ve bağlanmak istediğiniz ftp sitesi bilgilerini paylaşabilir misiniz?
-
- Üye
- Mesajlar: 28
- Kayıt: 15 Eyl 2014 12:33
Re: idFTP ile yükleme sorunsalı!...
ftp adres : 5.2.84.41
kullanıcı adı :karkas
parola : Karkas987654
//baglantı Fonksiyonum
// Bilgisayar Adı al Fonksiyonum var
Bu uygulama Bir Yedekleme Sistemi MSSQL ve FireBird veri Tabanlarını Otomatik Yedek Alıyor
Yedek Alırkende Klasör Yapısı
HedefKlasör içinde Bir Klasör daha Oluşturuyor Bu klasör Adını da Bilgisayar Adından Alıyor
Sonra içinde Bir Klasör Daha Yedeklemeyi Adını ve Tarihini Alıyor
Yani C:\Temp\Sinan-PC\SQLYEDEK_2017_10_31\Yedek.zip
Şeklinde Bir Yapı
Dosyayı FTP Atarkende BilgisayarAdı Klasörü ve Sonrasını Alıp FTP Dizin Varmı Yoksa Dizin Oluşturup Yedeği Yine Oraya Atıyorum
Fonksiyon Kullanımı
ancak bazı sunucularda çalıştıramadım
kullanıcı adı :karkas
parola : Karkas987654
//baglantı Fonksiyonum
// Bilgisayar Adı al Fonksiyonum var
Bu uygulama Bir Yedekleme Sistemi MSSQL ve FireBird veri Tabanlarını Otomatik Yedek Alıyor
Yedek Alırkende Klasör Yapısı
HedefKlasör içinde Bir Klasör daha Oluşturuyor Bu klasör Adını da Bilgisayar Adından Alıyor
Sonra içinde Bir Klasör Daha Yedeklemeyi Adını ve Tarihini Alıyor
Yani C:\Temp\Sinan-PC\SQLYEDEK_2017_10_31\Yedek.zip
Şeklinde Bir Yapı
Dosyayı FTP Atarkende BilgisayarAdı Klasörü ve Sonrasını Alıp FTP Dizin Varmı Yoksa Dizin Oluşturup Yedeği Yine Oraya Atıyorum
Kod: Tümünü seç
UnicodeString __fastcall TForm1::FTP_AKTARIM(UnicodeString HOST, UnicodeString KULLANICI_ADI, UnicodeString PAROLA, bool PasifMod, UnicodeString DOSYA_ADI)
{
try{
TIdFTP *IdFTP1 = new TIdFTP(this);
if (IdFTP1->Connected())
IdFTP1->Disconnect();
IdFTP1->Intercept = IdLogEvent1;
IdLogEvent1->Active = true;
IdFTP1->Passive = PasifMod;
IdFTP1->TransferType = ftBinary ;
//FTP Adresini Bölüyoruz
HOST = KARAKTER_DEGISTIR(HOST,"ftp://","");
HOST = KARAKTER_DEGISTIR(HOST,"/",",");
TStringList *FTP_ADRESI = new TStringList();
FTP_ADRESI->DelimitedText =HOST;
FTP_ADRESI->Delimiter=',';
IdFTP1->Host = FTP_ADRESI->Strings[0];
IdFTP1->Username = KULLANICI_ADI;
IdFTP1->Password = PAROLA;
IdFTP1->Connect();
TStringList *FTP_KLASOR_ICERIGI = new TStringList();
if(FTP_ADRESI->Count > 1)
{
for(int i=1;i<FTP_ADRESI->Count;i++)
{
if(FTP_ADRESI->Strings[i] !="" )
{
IdFTP1->List(FTP_KLASOR_ICERIGI,FTP_ADRESI->Strings[i],true);
//DİZİN İÇERİĞİ VARMI (KLASÖR KONTROLU YAPIYORUM)
if (FTP_KLASOR_ICERIGI->Count < 1 )
//DİZİN DAHA ÖNCE OLUŞTURULMAMIŞSA YENİ DİZİN OLUŞTURACAĞIZ
IdFTP1->MakeDir(FTP_ADRESI->Strings[i]) ;
//DIZINI DEĞİŞTİRİYORUZ
IdFTP1->ChangeDir(FTP_ADRESI->Strings[i]);
}
}
}
//FTP YE GÖNDERİLECEK DOSYA_ADI
//ShowMessage( DOSYA_ADI);
UnicodeString FTP_DIZIN_YOLU = DOSYA_ADI.SubString0(DOSYA_ADI.Pos(Form1->BILGISAYAR_ADI_AL())-1, DOSYA_ADI.Length() - (DOSYA_ADI.Pos( Form1->BILGISAYAR_ADI_AL())-1) );
FTP_DIZIN_YOLU = ExtractFileDir( FTP_DIZIN_YOLU ) ;
FTP_DIZIN_YOLU = KARAKTER_DEGISTIR(FTP_DIZIN_YOLU,"\\",",");
TStringList *FTP_DIZINLER = new TStringList();
FTP_DIZINLER->DelimitedText =FTP_DIZIN_YOLU;
FTP_DIZINLER->Delimiter=',';
for(int i=0;i<FTP_DIZINLER->Count;i++)
{
//DİZİNADI BOŞ DEĞİLSE
if(FTP_DIZINLER->Strings[i] !="" )
{
IdFTP1->List(FTP_KLASOR_ICERIGI,FTP_DIZINLER->Strings[i],true);
//DİZİN İÇERİĞİ VARMI (KLASÖR KONTROLU YAPIYORUZ)
if (FTP_KLASOR_ICERIGI->Count < 1 )
//DİZİN DAHA ÖNCE OLUŞTURULMAMIŞSA YENİ DİZİN OLUŞTURACAĞIZ
IdFTP1->MakeDir(FTP_DIZINLER->Strings[i]) ;
//DIZINI DEĞİŞTİRİYORUZ
IdFTP1->ChangeDir(FTP_DIZINLER->Strings[i]);
}
}
FTP_KLASOR_ICERIGI->Free();
FTP_DIZINLER->Free();
//FTPye Dosyayı Gönderiyoruz
IdFTP1->Put(DOSYA_ADI,ExtractFileName ( DOSYA_ADI ),false);
IdFTP1->List();
IdFTP1->Disconnect();
delete IdFTP1;
}catch(Exception *HATA)
{
ShowMessage(HATA->Message);
return "0";
}
return "-1" ;
}
Kod: Tümünü seç
FTP_AKTARIM("5.2.84.41", "Karkas987654", "Karkas987654", false, "C:\Temp\Sinan-PC\SQLYEDEK_2017_10_31\Yedek.zip")
Re: idFTP ile yükleme sorunsalı!...
1-Kullandığınız CBuilder++ sürümü nedir?
2-Kullandığınız Indy (TIdFTP) sürümü nedir?
3-Bunun dışında TIdLogEvent tarafından (IdFTP->Intercept) oluşturulan bir dosya var mı? Sorununuz ile ilgili bu dosyayı paylaşmanız mümkün mü?
Hata mesajından anlaşıldığı kadarıyla Türkçe karakter sorunu yaşıyorsunuz. Yani, FTP bağlantısı kuruluyor. Ancak dizin listeleme, oluşturma veya değiştirme sırasında ilgili hata mesajı geliyor.
Bağlantı kurulduğunda FTP sunucunuz UTF-8 desteğine sahip olduğunu bildiriyor. Normalde TIdFTP bileşeninin de bunu algılayıp kendi içinde çözümlemesi gerekir. Ancak bir sebepten yapamamış. Sebebini anlamak için IdLogEvent log detayları incelenebilir. Normalde bu log içeriğinde giden ve gelen iletişime dair komutlar olması gerekir.
4-FileZilla ile sorun çıkmadan bağlanabildiğinizi söylüyorsunuz. FileZilla Türkçe karakter içeren dizin ve dosyaları indirme/yükleme yapabiliyor mu? Eğer FileZilla bunu yapabiliyor ise sunucunuz ile ilgili sorun olmadığını kesinlikle söylemek mümkün olacaktır. Eğer yapamıyor ise FTP sunucusu UTF-8 desteklediğini söylüyor, ancak dosya sisteminde özel karakterler içeren dosyaları doğru bir şekilde UTF-8 olarak dönüştüremiyor demektir. Mevcut sunucuyu UTF-8 desteği olan farklı bir sunucu ile değiştirmek gerekebilir.
Alternatif bir çözüm olarak kolay olacağına inanıyor iseniz HOST parametresi içinden Türkçe karakterleri İngilizce karşılıklarına değiştirerek mevcut kodunuzu kullanmanız mümkün olabilir.
Konudan bağımsız olarak kodunuzda gözüme çarpan bir konu: URL içinden host kısmını siz kendiniz bölmeye çalışmayın. TIdURI sınıfını kullanın. Örnek kullanım için aşağıdaki bağlantıdan faydalanabilirsiniz. Delphi kodunu CBuilder++ koduna çevirmeniz gerekecektir.
https://stackoverflow.com/questions/132 ... rl-to-root
2-Kullandığınız Indy (TIdFTP) sürümü nedir?
3-Bunun dışında TIdLogEvent tarafından (IdFTP->Intercept) oluşturulan bir dosya var mı? Sorununuz ile ilgili bu dosyayı paylaşmanız mümkün mü?
Hata mesajından anlaşıldığı kadarıyla Türkçe karakter sorunu yaşıyorsunuz. Yani, FTP bağlantısı kuruluyor. Ancak dizin listeleme, oluşturma veya değiştirme sırasında ilgili hata mesajı geliyor.
Bağlantı kurulduğunda FTP sunucunuz UTF-8 desteğine sahip olduğunu bildiriyor. Normalde TIdFTP bileşeninin de bunu algılayıp kendi içinde çözümlemesi gerekir. Ancak bir sebepten yapamamış. Sebebini anlamak için IdLogEvent log detayları incelenebilir. Normalde bu log içeriğinde giden ve gelen iletişime dair komutlar olması gerekir.
4-FileZilla ile sorun çıkmadan bağlanabildiğinizi söylüyorsunuz. FileZilla Türkçe karakter içeren dizin ve dosyaları indirme/yükleme yapabiliyor mu? Eğer FileZilla bunu yapabiliyor ise sunucunuz ile ilgili sorun olmadığını kesinlikle söylemek mümkün olacaktır. Eğer yapamıyor ise FTP sunucusu UTF-8 desteklediğini söylüyor, ancak dosya sisteminde özel karakterler içeren dosyaları doğru bir şekilde UTF-8 olarak dönüştüremiyor demektir. Mevcut sunucuyu UTF-8 desteği olan farklı bir sunucu ile değiştirmek gerekebilir.
Alternatif bir çözüm olarak kolay olacağına inanıyor iseniz HOST parametresi içinden Türkçe karakterleri İngilizce karşılıklarına değiştirerek mevcut kodunuzu kullanmanız mümkün olabilir.
Konudan bağımsız olarak kodunuzda gözüme çarpan bir konu: URL içinden host kısmını siz kendiniz bölmeye çalışmayın. TIdURI sınıfını kullanın. Örnek kullanım için aşağıdaki bağlantıdan faydalanabilirsiniz. Delphi kodunu CBuilder++ koduna çevirmeniz gerekecektir.
https://stackoverflow.com/questions/132 ... rl-to-root
-
- Üye
- Mesajlar: 28
- Kayıt: 15 Eyl 2014 12:33
Re: idFTP ile yükleme sorunsalı!...
ertank hocam tskler
aynen dediğiniz gibi çıktı
sorun yedeği atmak için oluşturduğum dizin yapısından kaynaklanıyormuş (bazı sunucularda yapıp bazı sunucularda yapmaması çok garip değil mi)
ben dizin var mı yokmu kontrolu yapmam gerekiyor
dizin kontrolunu
String List Oluşturduktan sonra
ile Dizin içeriğinini Listeliyorum
oluşturduğum dizine giriyorum
Hata Aldığım Satır
dizin kontrolunu başka nasıl yapabilirim
aynen dediğiniz gibi çıktı
sorun yedeği atmak için oluşturduğum dizin yapısından kaynaklanıyormuş (bazı sunucularda yapıp bazı sunucularda yapmaması çok garip değil mi)
ben dizin var mı yokmu kontrolu yapmam gerekiyor
dizin kontrolunu
Kod: Tümünü seç
TStringList *FTP_KLASOR_ICERIGI = new TStringList();
Kod: Tümünü seç
IdFTP1->List(FTP_KLASOR_ICERIGI,FTP_DIZINLER->Strings[i],true);
Kod: Tümünü seç
if (FTP_KLASOR_ICERIGI->Count < 1 )
//içerik yok ise
IdFTP1->MakeDir(FTP_DIZINLER->Strings[i]) ;
//dizin oluşturuyorum
IdFTP1->ChangeDir(FTP_DIZINLER->Strings[i]);
Hata Aldığım Satır
Kod: Tümünü seç
IdFTP1->List(FTP_KLASOR_ICERIGI,FTP_DIZINLER->Strings[i],true);