如何使用TRESTClient / TRESTResponse接收文件?目前只能接收文字。
RESTResponse1.Content
答案 0 :(得分:1)
试试这个:
用于获取JPG文件的简单PHP Web服务:
<?php
$path = 'c:\1.jpg'; // file path on server
$data = file_get_contents($path);
$base64 = base64_encode($data);
$json = array("status" => 1, "info" => $base64);
header('Content-type: application/json');
echo json_encode($json,JSON_UNESCAPED_UNICODE);
用于从服务器保存JPG文件的Delphi代码:
procedure TForm1.btn1Click(Sender: TObject);
var
strResponeContnt : string;
oJSON: TJSONObject;
aJSON: TJSONArray;
strImageJSON : string;
varMemoryString : TMemoryStream;
begin
restClient1.BaseURL := 'http://test/getfile.php';
restRequest1.Client := restClient1;
restRequest1.Response := restResponse1;
restRequest1.Execute;
strResponeContnt := restResponse1.Content;
oJSON := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(strResponeContnt),0) as TJSONObject;
aJSON := TJSONArray(oJSON.Get('info').JsonValue);
strImageJSON := deQuotedString(oJSON.Pairs[1].JsonValue.ToString) ;
varMemoryString := TMemoryStream.Create;
try
IdDecoderMIME1.DecodeStream(strImageJSON, varMemoryString);
varMemoryString.Position := 0;
varMemoryString.SaveToFile('C:\3.jpg');
finally
varMemoryString.Free;
end;
end;
deQuotedString
功能:
function TForm1.deQuotedString(Value:String):String;
var
strtmp : string;
begin
strtmp := Value;
delete(strtmp,1,1);
delete(strtmp,Length(strtmp),1);
Result := strtmp;
end;
类变量声明:
restClient1: TRESTClient;
restRequest1: TRESTRequest;
restResponse1: TRESTResponse;
IdDecoderMIME1: TIdDecoderMIME;
JSON
使用单位:
System.JSON
毕竟你可以使用其他Delphi网页控件(如INDY)直接下载文件并保存。
答案 1 :(得分:1)
名称空间REST.Client
中有一个可以下载二进制数据的类:
REST.Client.TDownloadURL.DownloadRawBytes
uses REST.Client, IpPeerClient;
<...>
bStream := TMemoryStream.Create;
TDownloadURL.DownloadRawBytes(url, bStream);
<...>
您还应该使用实现单元IpPeerClient
。
答案 2 :(得分:0)
TRestResponse不适用于二进制数据。
使用idHTTP。
mem := TMemoryStream.Create;
idHttp1.Get('http://localhost/index.php', mem);
//do something
mem.free;