Indy 将 Memorystream 上传到 FTP
Indy upload Memorystream to FTP
我在运行时从屏幕截图生成 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 文件,但仍然 "valid"。
这不是我的 FTP 服务器,而是由我的域托管人拥有的。这是刚刚上传的 jpg 的 link:http://fluffykids.dk/test.jpg and here is the jpeg I saved to disc : http://fluffykids.dk/aa.jpg。
问题:为什么我上传 JPEG 后 "content" 丢失了?
您必须将 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;
我在运行时从屏幕截图生成 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 文件,但仍然 "valid"。
这不是我的 FTP 服务器,而是由我的域托管人拥有的。这是刚刚上传的 jpg 的 link:http://fluffykids.dk/test.jpg and here is the jpeg I saved to disc : http://fluffykids.dk/aa.jpg。
问题:为什么我上传 JPEG 后 "content" 丢失了?
您必须将 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;