crossSocket MultiPartFormData编(解)码
crossSocket MultiPartFormData编(解)码
delphi自带的TMultipartFormData,只能编码,不能解码。
cross-socket的THttpMultiPartFormData,既能编码,又能解码。
unit Unit1; interface uses Net.CrossHttpParams, System.Net.Mime, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var raw: RawByteString; Boundary: string; procedure TForm1.Button1Click(Sender: TObject); //编码MultiPartFormData begin //使用delphi自带的TMultipartFormData: var part: TMultipartFormData := TMultipartFormData.Create; part.AddField('f1', 'v1'); Boundary := part.Boundary; SetLength(raw, part.Stream.Size); part.stream.Read(raw[1], part.stream.Size); Memo1.Text := raw; part.Free; //使用cross-socket的THttpMultiPartFormData // var part: THttpMultiPartFormData := THttpMultiPartFormData.Create; // part.AddField('f1', 'v1'); // var stream: THttpMultiPartFormStream := THttpMultiPartFormStream.Create(part, True); // SetLength(raw, stream.Size); // stream.Read(raw[1], stream.Size); // Memo1.Text := raw; // Boundary := stream.MultiPartFormData.Boundary; // stream.Free; (* ----DCSFormBoundary361351253963EBBB Content-Disposition: form-data; name="f1" v1 ----DCSFormBoundary361351253963EBBB-- *) end; procedure TForm1.Button2Click(Sender: TObject); //解析MultiPartFormData begin var part: THttpMultiPartFormData := THttpMultiPartFormData.Create; var stream: THttpMultiPartFormStream := THttpMultiPartFormStream.Create(part, True); stream.MultiPartFormData.InitWithBoundary(Boundary); stream.MultiPartFormData.Decode(PRawByteString(raw), Length(raw)); memo1.Lines.Add(stream.MultiPartFormData.Fields['f1'].AsString); //v1 stream.Free; end; end.
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18925938