httpclient 4.+以上版本上传文件遇到的问题记录

在这周有个系统对接种要求采用Put上传文件
测试中获取本地file文件并上传的时候没有问题, 而通过前台接口选择文件传输到后台。在通过Http上传至文件服务器时发现异常情况


文件服务器上下载的文件

如图所示,下载到本地生成文件时二进制流中 会多处几行内容,这就很纳闷
原先代码采用的
multipartEntityBuilder.addBinaryBody("file", io);
HttpEntity entiy = multipartEntityBuilder.build();
httpClient.execute(httpPut)
进行的数据封装,之后进行请求下载文件,服务器返回的二进制流数据大小总是会比原先上传时的内容大!!
百思不得其解邮件编辑文件后发现二进制文件头尾多了一些内容。

经过一番捣鼓以后改成使用
BasicHttpEntity basicHttpEntity=new BasicHttpEntity();
basicHttpEntity.setContent(io);
再进行
httpClient.execute(httpPut);
问题完美解决。

原因:multipartEntityBuilder进行数据封装的时候会带上请求头尾(form表单提交的形式),执行请求的时候这些数据会带给服务端
改写成BasicHttpEntity将数据封装在请求体中进行传输。
再次下载的时候就不会多出头与尾的内容。通过下载请求得到的流转成byte[]数组可以直接返回给前台即可
至此问题解决........特此记录防止下次在遇到

你可能感兴趣的:(httpclient 4.+以上版本上传文件遇到的问题记录)