解决httpclient上传multipart form-data文件失败
来源:互联网 发布:日语网络 编辑:程序博客网 时间:2024/06/05 18:31
目标URL的multipart form-data是这样的
-----------------------------7e1a51350702Content-Disposition: form-data; name="keys"-----------------------------7e1a51350702Content-Disposition: form-data; name="typeid"1-----------------------------7e1a51350702Content-Disposition: form-data; name="BR_DESCRIPTION"-----------------------------7e1a51350702Content-Disposition: form-data; name="BR_EXPIREDATE"-----------------------------7e1a51350702Content-Disposition: form-data; name="BATCH_IMPORTFILE"; filename="xxx.txt"Content-Type: text/plain11111111111-----------------------------7e1a51350702Content-Disposition: form-data; name="BATCH_TYPE"0-----------------------------7e1a51350702--
然后原来的代码是这样的
File uploadFile=new File(pre+"xxx.txt"); ContentType contentType=ContentType.create(ContentType.TEXT_PLAIN.getMimeType(), "GBK"); FileBody fileBody=new FileBody(uploadFile, contentType,"xxx.txt"); StringBody keys=new StringBody("",ContentType.MULTIPART_FORM_DATA); StringBody typeid=new StringBody("3", ContentType.MULTIPART_FORM_DATA); StringBody BR_DESCRIPTION=new StringBody("", ContentType.MULTIPART_FORM_DATA); StringBody BR_EXPIREDATE=new StringBody("", ContentType.MULTIPART_FORM_DATA); StringBody BATCH_TYPE=new StringBody("0", ContentType.MULTIPART_FORM_DATA); HttpEntity httpEntity= MultipartEntityBuilder.create() .setLaxMode() .addPart("keys",keys) .addPart("typeid", typeid) .addPart("BR_DESCRIPTION", BR_DESCRIPTION) .addPart("BR_EXPIREDATE", BR_EXPIREDATE) .addPart("BATCH_IMPORTFILE", fileBody) .addPart("BATCH_TYPE", BATCH_TYPE) .build(); HttpPost doImportAdd=new HttpPost(importList); doImportAdd.setEntity(httpEntity); doImportAdd.addHeader("Accept", "application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*"); doImportAdd.setHeader("Accept-Language", "zh-CN"); doImportAdd.setHeader("User-Agent", " Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; MDDS; InfoPath.2)"); doImportAdd.setHeader("Content-Type", "multipart/form-data"); doImportAdd.setHeader("boundary", "---------------------------7e1103115079a"); doImportAdd.setHeader("Accept-Encoding", "gzip, deflate"); doImportAdd.setHeader("Connection", "Keep-Alive");
结果总是返回数据添加失败,但是返回的状态码是200,使用wireshark抓包,由于是使用程序执行的,所以选择本地连接,筛选出HTTP的请求
结果发现提示the multipart dissector could not find a required parameter
搜索该问题后在Stack Overflow 中找到有关的解决方法,就是把所有Header的构造都删除
删除后
File uploadFile=new File(pre+"xxx.txt"); ContentType contentType=ContentType.create(ContentType.TEXT_PLAIN.getMimeType(), "GBK"); FileBody fileBody=new FileBody(uploadFile, contentType,"xxx.txt"); StringBody keys=new StringBody("",ContentType.MULTIPART_FORM_DATA); StringBody typeid=new StringBody("3", ContentType.MULTIPART_FORM_DATA); StringBody BR_DESCRIPTION=new StringBody("", ContentType.MULTIPART_FORM_DATA); StringBody BR_EXPIREDATE=new StringBody("", ContentType.MULTIPART_FORM_DATA); StringBody BATCH_TYPE=new StringBody("0", ContentType.MULTIPART_FORM_DATA); HttpEntity httpEntity= MultipartEntityBuilder.create() .setLaxMode() .addPart("keys",keys) .addPart("typeid", typeid) .addPart("BR_DESCRIPTION", BR_DESCRIPTION) .addPart("BR_EXPIREDATE", BR_EXPIREDATE) .addPart("BATCH_IMPORTFILE", fileBody) .addPart("BATCH_TYPE", BATCH_TYPE) .build(); HttpPost doImportAdd=new HttpPost(importList); doImportAdd.setEntity(httpEntity);
结果成功上传文本文件。
个人理解是因为在构建MultipartEntityBuilder
是已经将模式设置为HttpMultipartMode.BROWSER_COMPATIBLE
,在构建Header的话可能会产生冲突。只是个人见解,不知道是否正确。欢迎纠正。
阅读全文
0 0
- 解决httpclient上传multipart form-data文件失败
- 解决httpclient上传multipart form-data文件--参数不合法
- HttpClient以multipart/form-data上传文件
- httpClient 使用multipart/form-data 类型上传文件及表单
- httpClient 使用multipart/form-data 类型上传文件及表单
- multipart/form-data 上传文件
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- 解决multipart/form-data上传的问题
- 上传文件multipart form-data boundary 说明
- Http 上传文件之multipart form-data
- Multipart/form-data POST文件上传详解
- Multipart/form-data POST文件上传详解
- 文件上传 enctype multipart/form-data
- Multipart/form-data POST文件上传详解
- python 发送上传文件multipart/form-data
- Multipart/form-data POST文件上传详解
- BZOJ2719
- [自制操作系统] JOS文件系统详解&支持工作路径&MSH
- CodeForces
- 一步一步来
- arpr
- 解决httpclient上传multipart form-data文件失败
- ReactNative进阶---Refs
- 进程间通信
- JSP Servlet 实现模糊动态查询并分页(拼接Sql)
- apache-comnons系列之commons-digester 3.3.2 学习笔记
- Windows屏保程序思考
- ubuntu linux dpkg 处理软件包,出错: 依赖关系问题
- post-removal 报错
- (二分法)【POJ-3104】Drying