Ene*_*ğlu 3 arrays delphi rest delphi-10.1-berlin
我正在使用 Delphi 10.1 Berlin
我想使用 将图像数据发送TBytes到 Rest 服务TRestRequest,但我找不到将 a 传递TBytes给该TRestRequest.AddBody()方法或任何其他方法的方法。
POST http://myserver:1111//Openxxx/RecxxxLxxxPxxxx HTTP/1.1 内容类型:文本/json 主机:myserver:1111 内容长度:28892 期望:100-继续 连接:保持活动 [255,216,255,224,0,16,74,70,73,70,0,1,1,0,0,1,0,1,0,0,255,219,0,132,0,9, ... ... ... 130,130,252,168,127,164,63,164,41,109,204,245,62,106,51,135,12,146,63,255,217]
TRESTRequest.AddBody()有一个接受 aTStream作为输入的重载。您可以使用类将您的包装TBytes成一个。TStreamTBytesStream
procedure TForm1.Button1Click(Sender: TObject);
var
ABytes: TBytes;
AStream: TBytesStream;
begin
ABytes := ...;
try
AStream := TBytesStream.Create(ABytes);
RESTRequest1.AddBody(AStream, ctIMAGE_JPEG);
RESTRequest1.Execute;
finally
AStream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
或者,TRESTRequestParameterList.AddItem改用它,它具有以下重载TBytes:
procedure TForm1.Button1Click(Sender: TObject);
var
ABytes: TBytes;
begin
ABytes := ...
RESTRequest1.Params.AddItem('body', ABytes, pkGETorPOST, [poDoNotEncode], ctIMAGE_JPEG);
RESTRequest1.Execute;
end;
Run Code Online (Sandbox Code Playgroud)
话虽如此,我发现TRESTClient它过于复杂和错误/限制。更多时候,Indy'sTIdHTTP更容易使用,例如:
procedure TForm1.Button1Click(Sender: TObject);
var
ABytes: TBytes;
AStream: TBytesStream;
begin
ABytes := ...;
try
AStream := TBytesStream.Create(ABytes);
IdHTTP1.Request.ContentType := 'image/jpeg';
IdHTTP1.Post('http://myserver:1111//Openxxx/RecxxxLxxxPxxxx', AStream);
finally
AStream.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
procedure TForm1.Button1Click(Sender: TObject);
begin
IdHTTP1.Request.ContentType := 'image/jpeg';
IdHTTP1.Post('http://myserver:1111//Openxxx/RecxxxLxxxPxxxx', 'image.jpg');
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5252 次 |
| 最近记录: |