如何通过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;
额外优化建议
- 添加try-finally块:确保创建的TJPEGImage和TMemoryStream对象能被正确释放,避免内存泄漏。
- 显式声明传输模式:虽然你提到已设置TransferType,但代码中显式声明可规避因全局配置异常导致的传输模式错误。
日志分析
从上传日志来看,FTP服务器已正确响应TYPE I(二进制模式)指令,说明传输模式配置无误,核心问题就是流指针位置错误导致的上传内容不完整。
内容的提问来源于stack exchange,提问作者Holy Thirteen
相关产品推荐
相关产品推荐

