HTTP上传POST报文通过使用TIdMultiPartFormDataStream类,在网上看到有人说这个TIdMultiPartFormDataStream类使用释放有问题,BUG很多,暂时我没遇到,至少解决了我的问题,期待有高手写一个更加好更加完美的类能替代这个。
引用单元
uses IdGlobal, IdMultipartFormData,idhttp; 代码片 function UploadFile(AUrl, AFileName, ATicket, AProjectid, AVersion, AVersionTime: WideString): WideString; procedure _InitFormDataStream(var ASendStream: TIdMultiPartFormDataStream); begin if not Assigned(ASendStream) then Exit; ASendStream.AddFormField('ticket', ATicket, 'utf-8').ContentTransfer := '8bit'; ASendStream.AddFormField('projectTreeId', AProjectid, 'utf-8').ContentTransfer := '8bit'; ASendStream.AddFormField('version', AVersion, 'utf-8').ContentTransfer := '8bit'; ASendStream.AddFormField('versionTime', AVersionTime, 'utf-8').ContentTransfer := '8bit'; ASendStream.AddFile('file', AFileName, 'multipart/form-data'); end; var LSendStream: TIdMultiPartFormDataStream; IdHttp: TIdHTTP; begin if AUrl = '' then Exit; if AFileName = '' then Exit; LSendStream := TIdMultiPartFormDataStream.Create; IdHttp := TIdHTTP.Create(nil); try _InitFormDataStream(LSendStream); IdHttp.Request.ContentType := LSendStream.RequestContentType; IdHttp.Request.CharSet := 'utf-8'; IdHttp.Request.ContentEncoding := 'utf-8'; Result := IdHttp.Post(AUrl, LSendStream); finally FreeAndNil(IdHttp); FreeAndNil(LSendStream); end; end;