外星人爸爸 發表於 2020-3-26 10:18:00

TNetHttpClient multipart/form-data

<p>TNetHttpClient multipart/form-data</p>
<p><strong>multipart/form-data</strong> 是HTTP的一项国际标准,专门用于传输二进制大数据文件。</p>
<p>因为是国标,所以主流的开发语言都支持,因此可以用于REST API开发。</p>
<p>DELPHI来说,INDY、TNetHttpClient都支持multipart/form-data。</p>
<p>multipart/form-data不仅可以上传文件,也可以用来传输“键值对”类型的参数列表。</p>
<p>对于HTTP服务器来说,完全可以通过multipart/form-data来定义远程方法的接口。</p>
<p>uses&nbsp;System.Net.Mime;</p>
<p>var&nbsp;NetHTTPClient1: TNetHTTPClient;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">procedure TForm1.Button1Click(Sender: TObject);
var
http: TNetHTTPClient;
parts: TMultipartFormData;
resp: TStringStream;
begin
if OpenDialog1.Execute then
begin
    http := TNetHTTPClient.Create(nil);
    parts := TMultipartFormData.Create;
    resp := TStringStream.Create('', TEncoding.GetEncoding(65001));
    try<br>      parts.AddField('fieldname', 'fieldvalue');
      parts.AddFile('fname', OpenDialog1.FileName);
      http.ConnectionTimeout := 2000; // 2秒
      http.ResponseTimeout := 10000; // 10秒
      http.AcceptCharSet := 'utf-8';
      http.AcceptEncoding := '65001';
      http.AcceptLanguage := 'zh-CN';
      http.ContentType := 'multipart/form-data';
      http.UserAgent := 'Embarcadero URI Client/1.0';
      try
      Memo1.Lines.Add('尝试上传文件 ' + OpenDialog1.FileName);
      http.Post('https://www.offeu.com/upfile', parts, resp);
      Application.ProcessMessages;
      except
      on E: Exception do            // Error sending data: (12002) 操作超时.
            // Error receiving data: (12002) 操作超时
          if Copy(E.Message, 1, Pos(':', E.Message) - 1) = 'Error sending data' then
            Memo1.Lines.Add('Error:连接失败!')
          else if Copy(E.Message, 1, Pos(':', E.Message) - 1) = 'Error receiving data' then
            Memo1.Lines.Add('Error:接收失败,请延长接收超时时间!')
          else
            Memo1.Lines.Add('Error:' + E.Message);
      end;
      Memo1.Lines.Add(resp.DataString);
    finally
      http.Free;
      resp.Free;
      parts.Free;
    end;
end;
end;
</pre>
</div>
<p>  </p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/12572563.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/12572563.html
頁: [1]
查看完整版本: TNetHttpClient multipart/form-data