delphi用indy的idhttp组件进行formData方式提交或上传文件的时候,有一个坑。
就是
formData:=TIdMultiPartFormDataStream.Create;
formData.AddFormField('someStr','[someStr]'); <==这句有坑
坑的原因:
如果AddFormField的值太长的时候(比如base64编码(base64也有一个坑,在下面讲)的某些东西),indy组件默认会在固定长度时加上“=”。。
加上的“=”会直接导致服务端接收到的数据有误(比如base64解码直接失败!)。
解决方法:
formData.AddFormField('someStr','[someStr]').ContentTransfer:=sContentTransferBinary;
在addformField后面指定一下ContentTransfer的类型。
(说明:
ContentTransfer的类型有3种:
sContentTransferPlaceHolder = 'Content-Transfer-Encoding: %s';
sContentTransferQuotedPrintable = 'quoted-printable';
sContentTransferBinary = 'binary';
默认是取的第2种,具体为什么要用第2种还不清楚,有兴趣的可以自行查一下indy的资料。
)