关于HTTP上传文件报文代码片记录 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; 记踩过delphi中indy的TIdMultiPartFormDataStream的一个坑 VIP文章 时间漩涡 于 2021-07-15 16:29:09 发布 1261 收藏 分类专栏: delphi 文章标签: delphi 版权 delphi用indy的idhttp组件进行formData方式提交或上传文件的时候,有一个坑。 就是 formData:=TIdMultiPartFormDataStream.Create; formData.AddFormField('someStr','[someStr]'); <==这句有坑 坑的原因: 如果AddFormField的值太长的时候(比如base64编码(base64也有一个坑,在下面讲)的某些东西),indy组件默认会在固定长度时加上“=”。。 加上的“=”会直接导致服务端接收到的数据有误(比如base64解码直接失败!)。 解决方法: formData.AddFormField('someStr','[someStr]').ContentTransfer:=sContentTransferBinary; 在addformField后面指定一下ContentTransfer的类型。 ———————————————— 版权声明:本文为CSDN博主「时间漩涡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/timer0677/article/details/118762043 Delphi7 TIdMultiPartFormDataStream 的坑对接快麦接口时,使用TIdMultiPartFormDataStream 多表单提交数据。 因为TIdMultiPartFormDataStream 每加一个字段时,总会在最后多加一个回车。这也就导致了最后总是有一个回车,接口在读取最后一个值时会多一个回车字符。导致签名过不了。 要处理一下,这里不改源码。有可能其他厂商是有处理这个问题的,但是对接快麦没有。 var |
|
来自: hncdman > 《delphi网络》