You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Delphi的TIdFtp完整上传图片?上传后图片局部变白

Delphi TIdFtp上传JPG图片出现局部白色区域的解决方法

问题根源

你的代码中,将JPG保存到MemoryStream后,未将流的Position重置为0,导致TIdFtp的Put方法从流的末尾开始读取数据,实际上传的内容不完整,最终出现图片局部空白(白色区域)的问题。

修复后的代码

var
  JPG: TJPEGImage;
  MS: TMemoryStream;
begin
  JPG := TJPEGImage.Create;
  try
    JPG.Assign(Image1.Picture.Bitmap);
    MS := TMemoryStream.Create;
    try
      JPG.SaveToStream(MS);
      MS.Position := 0; // 关键:重置流指针到起始位置
      IdFTP1.Connect;
      IdFTP1.TransferType := ftBinary; // 显式设置二进制传输,避免配置偏差
      IdFTP1.Put(MS, strFileName);
    finally
      MS.Free;
    end;
  finally
    JPG.Free;
  end;
  IdFTP1.Disconnect;
end;

额外优化建议

  1. 添加try-finally块:确保创建的TJPEGImage和TMemoryStream对象能被正确释放,避免内存泄漏。
  2. 显式声明传输模式:虽然你提到已设置TransferType,但代码中显式声明可规避因全局配置异常导致的传输模式错误。

日志分析

从上传日志来看,FTP服务器已正确响应TYPE I(二进制模式)指令,说明传输模式配置无误,核心问题就是流指针位置错误导致的上传内容不完整。

内容的提问来源于stack exchange,提问作者Holy Thirteen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:25:05