【问题标题】:Indy upload Memorystream to FTPIndy 上传 Memorystream 到 FTP
【发布时间】:2015-06-22 19:27:32
【问题描述】:

我在运行时从屏幕截图生成 JPEG,并希望将其上传到 FTP 服务器。但是当我上传它时,它不再是有效的 jpeg。

在本例中,我只是从 HD 加载位图:

首先是一些代码:

procedure TForm13.Button1Click(Sender: TObject);
var
  InBitmap: TBitmap;
  JpegImage: TJpegImage;
  MemoryStream: TMemoryStream;
  IdFTP: TIdFTP;
begin
  InBitmap := TBitmap.Create;
  MemoryStream := TMemoryStream.Create;
  JpegImage := TJpegImage.Create;
  IdFTP := TIdFTP.Create(self);

  try
    InBitmap.LoadFromFile('C:\aa\test.bmp');

    JpegImage.Assign(InBitmap);
    JpegImage.CompressionQuality := 65;
    JpegImage.SaveToStream(MemoryStream);

    with IdFTP do
      try
        Host := <HOST>;
        Username := <USER>;
        Password := <PASS>;
        Port := 21;
        Passive := True;
        Connect;
        MemoryStream.Position := 0;
        Put(MemoryStream, 'test.jpg');
      finally
        Disconnect;
      end;    
  finally
    IdFTP.Free;
    JpegImage.Free;
    InBitmap.Free;
    MemoryStream.Free;
  end;
end;

我在上传之前尝试将 JPEG 保存到文件中,它是有效的 JPG

我尝试在上传之前将 MemortStream 保存到一个文件中,它是一个有效的 JPG

但是当它上传到 FTP 服务器时,它只是一个空白的 JPG 文件,但仍然“有效”。

它不是我的 FTP 服务器,而是由托管我的域的人拥有的。这是刚刚上传的 jpg 的链接:http://fluffykids.dk/test.jpg,这是我保存到光盘的 jpeg:http://fluffykids.dk/aa.jpg

问题:为什么我在上传 JPEG 文件后丢失了“内容”?

【问题讨论】:

    标签: delphi indy indy10 delphi-xe6


    【解决方案1】:

    您必须将TIdFTP.TransferType 设置为ftBinary。默认为ftASCII,这会有所不同。

    with IdFTP do
      try
        Host := <HOST>;
        Username := <USER>;
        Password := <PASS>;
        Port := 21;
        Passive := True;
    
        TransferType := ftBinary;
    
        Connect;
        MemoryStream.Position := 0;
        Put(MemoryStream, 'test.jpg');
      finally
        Disconnect;
      end;    
    

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 2016-01-07
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 2012-01-23
      • 1970-01-01
      相关资源
      最近更新 更多