您好,欢迎来到刀刀网。
搜索
您的当前位置:首页TNetHttpClient上传文件

TNetHttpClient上传文件

来源:刀刀网
TNetHttpClient上传文件 TNetHttpClient上传文件

2017-06-24 16:55:18 99+ 1

Delphi如何实现multipart/form-data方式上传文件呢?以前我们是使用indy,也就是用idHttp加TIdMultiPartFormDataStream来实现;本着研究精神,今天看了一下TNetHttpClient的定义,发现有个

function Post(const AURL: string; const ASource:

TMultipartFormData; const AResponseContent: TStream = nil; const AHeaders: TNetHeaders = nil): IHTTPResponse; overload;的定义,然后官网查看了一下TMultipartFormData的说明,确认TNetHttpClient是可以完成formdata方式上传文件操作的,实验代码如下:

1 uses System.Net.Mime, // 用于支持 TMultipartFormData

2 System.Net.HttpClientComponent; // 用于支持 TNetHTTPClient 3 procedure TfrmMain.Button1Click(Sender: TObject); 4 var

5 cHttp: TNetHTTPClient; 6 vData: TMultipartFormData; 7 vRsp: TStringStream; 8 begin

9 if OpenDialog1.Execute then 10 begin 11 cHttp := TNetHTTPClient.Create(nil); 12 vData := TMultipartFormData.Create; 13 vRsp := TStringStream.Create('', 14 TEncoding.GetEncoding(65001)); 15 try 16 vData.AddFile('fname', OpenDialog1.FileName); 17 with cHttp do 18 begin 19 ConnectionTimeout := 2000; // 2秒 20 ResponseTimeout := 10000; // 10秒 21 AcceptCharSet := 'utf-8'; 22 AcceptEncoding := '65001'; 23 AcceptLanguage := 'zh-CN'; 24 ContentType := 'multipart/form-data';

25 UserAgent := 'Embarcadero URI Client/1.0'; 26 try 27 Memo1.Lines.Add('尝试上传文件 ' + 28 OpenDialog1.FileName); 29 Post('https://www.offeu.com/upfile', vData, 30 vRsp); 31 Application.ProcessMessages; 32 except 33 on E: Exception do 34 // Error sending data: (12002) 操作超时. 35 // Error receiving data: (12002) 操作超时 36 if Copy(E.Message, 1, Pos(':', E.Message) - 37 1) = 'Error sending data' 38 then 39 Memo1.Lines.Add('Error:连接失败!') 40 else if Copy(E.Message, 1, Pos(':', 41 E.Message) - 1) = 'Error receiving data' 42 then 43 Memo1.Lines.Add('Error:接收失败,请延长44 接收超时时间!') 45 else 46 Memo1.Lines.Add('Error:' + E.Message); 47 end; 48 Memo1.Lines.Add(vRsp.DataString); 49 end; 50 finally 51 cHttp.Free; vRsp.Free; vData.Free; end; end; end;

我拿自己的网站的formdata接口进行了测试,上传文件很稳定。 不过,有个问题,因为emb官方没有提供数据发送的定义,所以无法实现上传进度的显示,但针对下载这块,又提供了,所以只能显示下载进度。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务