FTP服务器是SEVR-U6,用IDFTP.PUT上传文件。在局域网内一切正常。而通过外网访问时,如果上传的文件超过2M,程序就死掉了。但该文件已经上传至服务器上了。在IDE环境中用F8执行发现执行到IDFTP.PUT后就不往下执行了。代码如下:
Function FtpFiles(filename,ipaddress,username,password:string;ftp: TIdFtp):boolean;
var
  fileStream:TFileStream;
begin
  result := false;
  ftp.Host := ipaddress;
  ftp.Username := username;
  ftp.Password := password;
  try
    ftp.Connect;
  except
  end;  if ftp.Connected then
  begin
    try
      fileStream  :=  TFileStream.Create(filename,  fmOpenRead);
      ftp.Put(fileStream,extractfilename(filename),false);
      fileStream.Free;
      result := true;
    except
      ftp.Abort;
    end;
    ftp.Disconnect;
  end;
end;

解决方案 »

  1.   

    首先,不能用D7自带的
    要用最新的
    第二,PUT是独占访问的,有必要时使用线程处理
    最后,注意PSAV和PORT的区别
      

  2.   

    请问一下哪有最新的INDY下载呀!独占倒是没有关系,关健是它传大的文件就死掉。
    我用的是PSAV,用PORT根本上就不行。
      

  3.   

    http://www.indyproject.org/Sockets/wizard/DownloadWizard.EN.aspx  这里可以下最新的。传大的文件就死掉: 所以叫你写在线程里了。
      

  4.   

    indy10中的idftp为什么做不了上传进度了。procedure TForm1.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCount: Integer);
    begin
      ProgressBar1.Position := AWorkCount;
    end;procedure TForm1.IdFTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCountMax: Integer);
    begin
      ProgressBar1.Max := AWorkCountMax;
    end;进度条ProgressBar1没有反应了,同样的写法在delphi7自带的indy下可以的。