Indy FTP 上传失败

发布于 2024-12-19 04:41:59 字数 404 浏览 2 评论 0原文

使用简单的代码,例如:

  procedure TForm1.cxButton1Click(Sender: TObject);
  begin
  ftp.Host := 'domain';
  ftp.Username := 'user';
  ftp.Password := 'password';
  ftp.Connect;
  ftp.Put('C:\_Projects\testpicture.JPG');
  ftp.Quit;
  ftp.Disconnect;
  end;

我得到以下结果:

  • 应用程序在上传时冻结(因此无法看到进度栏位置)。
  • 上传的文件已损坏(损坏的内容超过几个字节)。

我到底做错了什么?

谢谢。

Using a simple code, such as:

  procedure TForm1.cxButton1Click(Sender: TObject);
  begin
  ftp.Host := 'domain';
  ftp.Username := 'user';
  ftp.Password := 'password';
  ftp.Connect;
  ftp.Put('C:\_Projects\testpicture.JPG');
  ftp.Quit;
  ftp.Disconnect;
  end;

I'm getting the following results:

  • Application freezes while uploading (ergo unable to see Progress Bar position).
  • Uploaded file goes corrupted (corrupts anything more than a few bytes).

What on earth am I doing wrong?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终止放荡 2024-12-26 04:41:59

应用程序冻结是因为 Indy 使用阻塞操作。当代码运行时,主消息循环并未运行,因此在 cxButton1Click() 退出之前不会处理新消息。要解决此问题,请将 TIdAntiFreeze 组件放置到 TForm 上,或者将 TIdFTP 代码移动到单独的工作线程,然后使用 < code>TIdSync 或 TIdNotify 在需要时安全地更新 UI。

如果您以 ASCII 模式而不是二进制模式传输文件,该文件将被“损坏”。确保将 TIdFTP.TransferType 属性设置为 ftBinary。 Indy 9 及更早版本默认为 ftBinary,但 Indy 10 默认为 ftASCII(以匹配 FTP 协议规范)。

The app freezes because Indy uses blocking operations. While the code is running, the main message loop is not running, so new messages are not being processed until cxButton1Click() exits. To solve that, either place a TIdAntiFreeze component onto your TForm, or else move the TIdFTP code to a separate worker thread, and then use TIdSync or TIdNotify to update the UI safely when needed.

The file will be "corrupted" if you are transferring it in ASCII mode instead of in binary mode. Make sure the TIdFTP.TransferType property is set to ftBinary. Indy 9 and earlier defaulted to ftBinary, but Indy 10 defaults to ftASCII instead (to match the FTP protocol specs).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文