TNetHttpClient multipart/form-data
TNetHttpClient multipart/form-data
multipart/form-data 是HTTP的一项国际标准,专门用于传输二进制大数据文件。
因为是国标,所以主流的开发语言都支持,因此可以用于REST API开发。
DELPHI来说,INDY、TNetHttpClient都支持multipart/form-data。
multipart/form-data不仅可以上传文件,也可以用来传输“键值对”类型的参数列表。
对于HTTP服务器来说,完全可以通过multipart/form-data来定义远程方法的接口。
uses System.Net.Mime;
var NetHTTPClient1: TNetHTTPClient;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 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; |
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/12572563.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2018-03-26 FIREMONEY手机虚拟键盘遮挡的解决
2012-03-26 服务器群集解决方案