Jen*_*olt 1 delphi indy indy10 delphi-xe6
我在运行时从屏幕截图生成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;
Run Code Online (Sandbox Code Playgroud)
我试图在上传之前将JPEG保存到文件中,它是一个有效的JPG
我试图在上传之前将MemortStream保存到文件中,它是一个有效的JPG
但是当它上传到FTP服务器时,它只是一个空白的JPG文件,但仍然是"有效的".
它不是我的FTP服务器,而是托管我的域的人所拥有的服务器.这是刚刚上传的jpg的链接:http://fluffykids.dk/test.jpg,这是我保存到光盘的jpeg:http://fluffykids.dk/aa.jpg.
问题:上传后我为什么要丢失JPEG的"内容"?
你必须设置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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2089 次 |
| 最近记录: |