天天看点

基于HTTP的多文件上传问题

企业应用中会经常用到基于Http的文件上传,其中Multipart是多文件上传所使用的,在用JAVA开发时有时会用第三方类库来拼HTTP报文,有时则手动组装,

然后手动组装前先要了解一下报文的格式,如下是HTTP的报文头:

重点是:

其中Content-Type决定了报文的类型,boundary则用于分隔各条目项。

示例如下:

对于multipart的解析我用的是apache的commons-fileupload-1.3.jar,demo如下:

其中判断类型的代码如下:

有一点需要注意的是,upload.parseRequest(request)方法里的源码是这样的:

也就是说如果两个boundary之间是空的,就认为到eof了,也就是结束了往下的遍历,因为在实际的使用当中,我在拼报文时不小心在两个条项目中多加了一个boundary,这时后面的条项目就取不到了,这个问题让我纠结了半天,觉得很诡异,后来读源码才发现,原来如此。

如果使用第三方的类库就不会有此烦恼了,我用的是apache的httpmime-4.2.2.jar,测试的代码如下:

测试的过程中我用的抓包工具是Wireshark,界面如下:

基于HTTP的多文件上传问题

                                                                       图1--Wireshark界面

查看到的TCP流如下:

基于HTTP的多文件上传问题

                                                                                   图2--TCP流

最后总结一下:multipart/form-data对于多文件上传还是很好用的