使用TRESTClient(delphi)接收文件

时间:2017-11-07 21:50:09

标签: delphi

如何使用TRESTClient / TRESTResponse接收文件?目前只能接收文字。

RESTResponse1.Content

3 个答案:

答案 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;