【问题标题】:How to send CSV-File to a REST-Controller (Multipart formposts) via Delphi 10.1 [duplicate]如何通过 Delphi 10.1 将 CSV 文件发送到 REST 控制器(多部分表单)[重复]
【发布时间】:2020-11-20 17:57:43
【问题描述】:

我尝试模拟与此控制台调用相同的行为:

# curl -X POST -F"file=@myfile.csv" 'https://myserver/upload'

这是我的 Delphi 10.1 代码:

procedure TForm1.Button1Click(Sender: TObject);
var localfile:String;
    localpath:string;
begin
  localfile := 'myfile.csv';
  localpath := 'C:\upload';

  SetCurrentDir(localpath);

  RESTClient.ContentType:= 'multipart/form-data';
  RESTClient.BaseURL:= 'https://myserver';
  RESTRequest.Accept:= '*/*';
  RESTRequest.Method:= rmPOST;
  RESTRequest.Resource:= 'upload';

  RESTRequest.AddParameter('file',localfile, TRESTRequestParameterKind.pkREQUESTBODY);
  RESTRequest.Execute;

  Memo1.Lines.Add(RESTResponse.Content);
end;

它失败了:415 Unsupported Media Type

【问题讨论】:

  • 您显示的 curl 命令行不执行 REST 请求,它是用于上传文件的简单 HTTP“POST”。您应该使用 HTTP 客户端组件。有很多可用的(我是 ICS 的作者:wiki.overbyte.be)。您的问题可能在那里得到解答:stackoverflow.com/questions/10889511/…
  • 你救了我的命,非常感谢。

标签: rest delphi


【解决方案1】:

这段代码对我有用

procedure TForm1.Button1Click(Sender: TObject);
var
  MPdata: TMultipartFormData;
  localfile:String;
  localpath:string;
  LHTTP: TNetHTTPClient;
begin

  localfile := 'myfile.csv';
  localpath := 'C:upload';

  SetCurrentDir(localpath);

  LHTTP := TNetHTTPClient.Create(nil);
  try
    MPdata := TMultipartFormData.Create();
    MPdata.AddFile('file',localfile);
    Memo1.Lines.Text := LHTTP.Post('https://myserver/upload', MPdata).ContentAsString;
  finally
    MPdata.Free;
    LHTTP.Free;
  end;
end;

【讨论】:

  • 您不应该对标记为重复的问题发布答案。相反,如果您的答案不同,则应将您的答案添加到其他问题。
猜你喜欢
  • 2019-12-14
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2015-07-23
相关资源
最近更新 更多