包由Header和Body构造成,Header记录了一些相关的数据,大同小异,唯一的一个需要注意的是Content-length字段标志了Body段的长度。在网上搜索到一段老外的代码,是全部转换为字符串后的处理代码,经实验后无法针对Binary文件提交,改写为Byte后可正常提交。
在Header中需要定义个分割符,可用32位UUID或者任意不可能与文件产生冲突的字符串作为分隔符
Body数据类格式类似如下
--boundaryboundary\r\n
Content-Description:form-data;name="theName"(\r\n)
\r\n
value\r\n
Body文件类协议如下
Content-Description:form-data;name="fileName";filename="thefilerealname"\r\n
Content-Type:application/octet-stream\r\n
[the file binary]
--boundaryboundary--\n
每个Body段开头由Boundary开头,最前面要有“--",在数据体结束的时候,末尾要有"--"再加一个\n字符
将整个Body转换为Byte流,计算出长度,赋值给Header的Content-Length,再将Header转化为Byte流,与Body进行结合,最后通过Winsock提交到指定的服务端处理程序。
在Header中需要定义个分割符,可用32位UUID或者任意不可能与文件产生冲突的字符串作为分隔符
Body数据类格式类似如下
--boundaryboundary\r\n
Content-Description:form-data;name="theName"(\r\n)
\r\n
value\r\n
Body文件类协议如下
Content-Description:form-data;name="fileName";filename="thefilerealname"\r\n
Content-Type:application/octet-stream\r\n
[the file binary]
--boundaryboundary--\n
每个Body段开头由Boundary开头,最前面要有“--",在数据体结束的时候,末尾要有"--"再加一个\n字符
将整个Body转换为Byte流,计算出长度,赋值给Header的Content-Length,再将Header转化为Byte流,与Body进行结合,最后通过Winsock提交到指定的服务端处理程序。