post表单数据格式完全解析multipart/form-data
参数说明 | 内容 |
boundary | boundary一个字符串,用以分隔不同的参数; string boundary = Guid.NewGuid().ToString(); 会生成如下字符串:9470b619-f08f-436e-a6b2-98fcb02b695b 也可以自定义一个比较复杂的字符串作为分隔符,例如@adsadsadsads123456789@ request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary; --boundary开始分隔符,也就是boundary之前加两个短划线,用以标记每一条数据的起始位置; --boundary--结束分隔符,也就是boundary之前和之后各加两个短划线,用以标记所有数据的结束位置; |
\r\n | 换行符\r\n,用以标记分隔符和参数声明之间、各参数声明之间、参数声明和参数值之间、参数值和下一条数据之间的分隔位置; l boundary和数据声明之间有且只有1个换行符; l 各条数据声明之间有且只有1个换行符; l 数据声明和数据值之间有且只有2个换行符; l 数据值和下一条数据之间有且只有1个换行符; |
其他参数 | CContent-Type:text/plain;charset=utf-8表示数据内容的格式为普通文本,编码格式为utf-8; Content-Disposition:form-data表示内容的处置方式,表示将内容作为formdata格式进行处理; name=\"sInputF\"表示传递参数的名称,或者叫键值、或者字段名称; 所有数据,无论是文本数据还是文件流数据,最终都以byte[]的格式进行传输; |
示例 | --boundary //第一条数据 数据声明1 数据声明2 数据 --boundary//第二条数据 数据声明1 数据声明2 数据 ... --boundary--//数据结束 |
结构详解
参数 | 项目 | 内容 |
开始 | 换行符 | 第一个开始分隔符前可以没有换行符\r\n |
参数1 sInputF 文件参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | Content-Disposition:form-data;name=\"sInputF\";filename=\"{Path.GetFileName(mDocPath)}\" | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Type:application/octet-stream | |
换行符 | 声明和数据值之间,有且只有2个换行符\r\n\r\n | |
数据值 | byte[] docFileBytes = ReadFileBytes(mDocPath); | |
换行符 | 有且只有1个换行符\r\n | |
参数2 sSealF 文件参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | Content-Disposition:form-data;name=\"sSealF\";filename=\"{Path.GetFileName(mSealPath)}\" | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Type:application/octet-stream | |
换行符 | 声明和数据值之间,有且只有2个换行符\r\n\r\n | |
数据值 | byte[] sealFileBytes = ReadFileBytes(mSealPath); | |
换行符 | 有且只有1个换行符\r\n | |
参数3 sPageNum 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"sPageNum\" | |
换行符 | 声明和数据值之间,有且只有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 有且只有1个换行符\r\n | |
参数4 fSealW 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealW\" | |
换行符 | 声明和数据值之间,有且只有2个换行符\r\n\r\n | |
数据值 | 100 | |
换行符 | 有且只有1个换行符\r\n | |
参数5 fSealH 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealH\" | |
换行符 | 声明和数据值之间,有且只有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 有且只有1个换行符\r\n | |
参数6 fSealPosX 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealPosX\" | |
换行符 | 声明和数据值之间,有且只有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 有且只有1个换行符\r\n | |
参数7 fSealPosY 文本参数 | 开始分隔符 | "--" + boundary |
换行符 | 有且只有1个换行符\r\n | |
数据声明1: | CContent-Type:text/plain;charset=utf-8 | |
换行符 | 有且只有1个换行符\r\n | |
数据声明2: | Content-Disposition:form-data;name=\"fSealPosY\" | |
换行符 | 声明和数据值之间,有且只有2个换行符\r\n\r\n | |
数据值 | 1 | |
换行符 | 有且只有1个换行符\r\n | |
结束 | 结束分隔符 | "--" + boundary "--",结束分隔符之后可以没有换行符 |