Wysyłanie obrazków na serwer FTP za pomocą indy10

0

Cześć,

ostatnio na szybko zrobiłem prosty program, który ma mi pomóc przy wrzucaniu treści do social mediów poprzez stronę WWW. Mniejsza o szczegóły - mam problem z umieszczaniem obrazków na serwerze FTP. Do wysyłania plików używam takiego oto kodu (korzystam z Indy10):

function FTPWyslijPlik (zrodlo, cel:string; host: string; user: string; haslo: string): boolean;
var
  FTP: TIdFTP;
begin
  FTP := TIdFTP.Create(nil);
  FTP.Host     := host;
  FTP.Username := user;
  FTP.Password := haslo;
  FTP.Passive := true;
   try
      FTP.Connect();
      FTP.Put(zrodlo, cel);
      if FTP.Connected = true then FTP.Disconnect;

      result := true;
   except
      on exception do result := false;
   end;

  FTP.Free;
end;

Problem w tym, że plik typu plik HTML strony WWW przesyłany jest poprawnie, natomiast grafika na stronie nie jest wyświetlana. Lokalnie (na komputerze) strona wraz z grafiką jest poprawnie wyświetlana. Natomiast po przesłaniu plików na serwer FTP, strona wyświetla wszystko tylko nie grafikę. Gdy porównywałem wielkość pliku graficznego lokalnie i po przesłaniu tą metodą, wówczas plik po przesłaniu jest mniejszy (ucięty?) niż plik, który mam lokalnie. Na początku myślałem, że to wina serwera FTP, natomiast próbowałem tego samego w innym serwisie i problem ponownie występuje.

Czy ta metoda przesyłania plików ma jakąś wadę? W kodzie mam błąd?

Pozdrawiam!

7

Pliki binarne powinieneś wysyłać w trybie binarnym:

FTP.TransferType := ftBinary;
0

@Patryk27: Dzięki wielkie!

6

Jeszcze taka mała sugestia, co do tego kawałka:

Reiko napisał(a):
   except
      on exception do result := false;
   end;

Używasz konstrukcji on * do, choć tak naprawdę jej nie używasz – nie jest ona potrzebna do ustawienia rezultatu metody. W tym przypadku wystarczy napisać po prostu:

except
  Result := False;
end;

Konstrukcja on * do przydaje się podczas selektywnej obsługi wyjątków:

except
  on EZeroDivide do
  begin
    // błąd dzielenia przez zero
  end;
  on ERangeError do
  begin
    // błąd związany z zakresem
  end;
end;

a także wtedy, kiedy jest potrzebny obiekt wyjątku (np. w celu odczytania z niego danych takich jak komunikat lub w celu przekazania go np. w parametrze innej metody):

except
  on E: Exception do // jako ogólny wyjątek
    DoSomething(E); // przekazanie obiektu wyjątku
end;

No i też warto zaznaczyć, że dostęp do ostatnio wywołanego wyjątku (a nawet do całego ich stosu) jest możliwy z dowolnego miejsca projektu – wystarczy skorzystać z funkcji ExceptObject i temu podobnych globali.

1 użytkowników online, w tym zalogowanych: 0, gości: 1