Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Проблема с отправкой файлов на FTP


Автор: MotoArhangel 31.3.2015, 14:04
Ответ сервера:
Код

Ответ:    220 Microsoft FTP Service
Команда:    SYST
Ответ:    215 Windows_NT
Команда:    FEAT
Ответ:    211-Extended features supported:
Ответ:     LANG EN*
Ответ:     UTF8
Ответ:     AUTH TLS;TLS-C;SSL;TLS-P;
Ответ:     PBSZ
Ответ:     PROT C;P;
Ответ:     CCC
Ответ:     HOST
Ответ:     SIZE
Ответ:     MDTM
Ответ:     REST STREAM
Ответ:    211 END
Команда:    OPTS UTF8 ON
Ответ:    200 OPTS UTF8 command successful - UTF8 encoding now ON.
Команда:    TYPE I
Ответ:    200 Type set to I.
Команда:    PASV
Ответ:    227 Entering Passive Mode (10,17,0,58,201,52).
Команда:    LIST
Ответ:    150 Opening BINARY mode data connection.
Ответ:    226 Transfer complete.


Файлы с русскими названиями передаются, но в итоге на сервере отображается крокозябра.
Привожу функцию:
Код

Function FTPUpload(FTPIp,UserName,UserPass,FTPPort,DirFTP,DirFile:string):string;
var
  IdFTP:TIdFtp;
begin
 IdFTP:=TIdFTP.Create(nil);
 try
   IdFTP.Username := UserName;
   IdFTP.Password := UserPass;
   if FTPPort<>''
     then IdFTP.port := StrToInt64(FTPPort)
       else IdFtp.Port:= 21;
    IdFtp.Host:= FTPIp;
    IdFtp.Passive:=True;
    IdFtp.ConnectTimeout:=3000;
    idftp.TransferType:=ftBinary;

   try
      if IdFTP.Connected then
        begin

          {if IdFTP.IsExtSupported('UTF8') then begin
            if IdFTP.SendCmd('OPTS UTF8 ON') = 200 then begin
              DirFTP:=UTF8Encode(DirFTP);
              DirFile:=UTF8Encode(DirFile);
              IdFTP.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8;
            end;
          end;}

         IdFTP.ChangeDir('/'+DirFTP);
         IdFTP.Put(PChar(DirFile),PChar(ExtractFileName(DirFile)),False);
         idFTP.Disconnect;
         result:='Отправлено';
        end
      else
        begin
          IdFTP.Abort;
        end;
    except
     on E : Exception do
       begin
         result:='Ошибка: '+E.Message;
         idFTP.Disconnect;
       end;
     end;
   except
     on E : Exception do
       begin
         result:='Ошибка: '+E.Message;
         idFTP.Disconnect;
       end;
     end;
 finally
   IdFTP.Free;
 end;
end;

Буду признателен если подскажете решение.

Автор: MotoArhangel 1.4.2015, 12:00
Спасибо конечно же за помощь. Не хватало UTF8Encode:
Код

function EncodeUTF(const SourceStr: UnicodeString): UTF8String; Overload;
begin
  Result := UTF8Encode(SourceStr);
end;

Вот только почему то компилятор выдает:
[dcc32 Warning] FTP.pas(53): W1057 Implicit string cast from 'UTF8String' to 'string'

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)